ERROR en Insertar datos en fila vacía

Hola chico, mis saludos
Como comprenderás, tengo un problema que dando vueltas por TODOEXPERTOS y googleando, no pude encontrar solución a mi problema, el siguiente, apesa rde utilizar varias rutinas para resolver mi problema
Tengo este código en un form donde inserto datos a una hoja(hoja1).
2 Combos captan los datos de la hoja2, el segundo capta según la selección en el primer, están perfectos, lo que si no logro resolver es que inserte datos en la linea SIGUIENTE A LA OCUPADA (Hoja1)
Option Explicit
Dim COLUMNA As Integer
Private Sub cmdAceptar_Click()
Dim CeldaInicial As Variant
Dim col As Integer
'------------------------
'------------------------
Dim fila As Integer
CeldaInicial = "A5"
Set CeldaInicial = Range(CeldaInicial)
col = CeldaInicial.Column
''Busca cuál es la última fila. De la 1 a la 4 es encabezado '''''Esta inserta pero tampoco puedo acomodarla para que inserte en la fila siguiente a la ocupada, siempre inserta encima de la existente
If CeldaInicial.Offset(1, 0).Value = "" Then
    fila = 5
Else
    fila = CeldaInicial.End(xlDown).Row + 1
End If
'----- El codigo que coloque, siempre me dá error en la linea Cells(fila, col).Value = Cbx_Estado
'Dim linea_libre As Long
'Application.ScreenUpdating = False
'Sheets(1).Select
'linea_libre = WorksheetFunction.CountA(Range("A:A")) + 1
'-----
''Comienza a copiar los valores del UserForm a la hoja
Cells(fila, col).Value = Cbx_Estado
Cells(fila, col + 1).Value = Cbx_Ciudad
Cells(fila, col + 2).Value = TextIPS.Value
Cells(fila, col + 3).Value = TextTelf.Value
Cells(fila, col + 4).Value = TextFecha.Value
Cells(fila, col + 5).Value = TextHora.Value
Cells(fila, col + 6).Value = TextRecibidor.Value
Cells(fila, col + 7).Value = TextMotivo.Value
Cells(fila, col + 8).Value = TextMiNombre.Value
Cells(fila, col + 9).Value = TextAccion.Value
Cells(fila, col + 10).Value = TextObservacion.Value
Set CeldaInicial = Nothing
Cbx_Estado.Text = "Estado"
Cbx_Ciudad.Text = "Ciudad"
TextIPS = ""
TextTelf = ""
TextFecha = ""
TextHora = ""
TextRecibidor = ""
TextMotivo = ""
TextMiNombre = ""
TextAccion = ""
TextObservacion = ""
TextIPS.SetFocus
End Sub
Private Sub Cbx_Estado_Change()
Application.ScreenUpdating = False
'Llenamos el cbx_Ciudad al recibir el foco, pero antes lo limpiamos
Cbx_Ciudad.Clear
'seleccionamos la hoja1
Hoja2.Select
'Miramos lo que hay seleccionado en el Cbx_Estado Listindex + 1 nos devuelve la columna del estado,
'porque el listindex empieza siempre por cero
COLUMNA = Cbx_Estado.ListIndex + 1
If COLUMNA = 0 Then Exit Sub
'seleccionamos la celda que proceda, a partir de la segunda fila
Cells(2, COLUMNA).Select
'Vamos a llenar dinámicamente el Cbx_Ciudad dependiendo del país elegido
Do While Not IsEmpty(ActiveCell)
    'Añadimos los nombres de las ciudades al Cbx_Ciudad
    Cbx_Ciudad.AddItem ActiveCell
    ActiveCell.Offset(1, 0).Select 'Bajamos una fila
Loop
Hoja1.Select
Application.ScreenUpdating = True
End Sub
Private Sub cmdSalir_Click()
    'ActiveWorkbook.Save 'Guarda el cambio de datos en el libro
    Unload Me
End Sub
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
Hoja2.Select 'Al inciar el formulario, seleccionamos la hoja con los datos
Range("A1").Select 'Seleccionamos la celda A1
Do While ActiveCell <> Empty 'Hasta que no encuentre una columna vacía que llene todo con datos
    Cbx_Estado.AddItem ActiveCell.Value
    ActiveCell.Offset(0, 1).Select 'nos desplazamos una columna a la derecha
Loop
Hoja1.Select
TextIPS.SetFocus
Application.ScreenUpdating = True
End Sub

En esta imagen llega hasta la columna QUE que es hasta donde se llena con la inserción del form (TextBox y 2 ComboBox). ! Combo coge los Estados y el 2º coge las ciudades.
Lo demás son datos insertados desde los TextBox en el form por medio del botón cmdAceptar

1 respuesta

Respuesta
-1
Siento la tardanza de respuesta pero he estado de vacaciones y no he estado por aquí. Vamos a ver si no entendí mal... tienes un combo cbx_estado que te coge los estados y un combo cbx_ciudad que te capta las ciudades y el resto de datos te los coge de lo que tu escribes en los textbox, ¿cierto?
Bueno pues empezando desde el principio yo haría lo siguiente:
Partiendo de la base de que tenemos lo siguiente:
- El combobox cbx_estado.
- El combobox cbx_ciudad
- Un label de name lbl_estado: que nos capte el estado del combobox cbx_estado.
- Un label de name lbl_ciudad que nos capte el dato del combobox cbx_cuidad.
- Los siguientes textbox:
- txt_prestador, txt_telefono, txt_fecha, txt_destino, txt_hora, txt_recibidor, txt_motivo, txt_nombre, txt_accion, txt_observaciones
- Un commandButton llamado cmd_Aceptar.
Una vez que tenemos todo esto, empezamos con la programación:
- Damos doble click en el userform y nos colocamos en la orden userform_inzialize
Empezamos a programar:
Private Sub userform1_inizialize()
cbx_estado.Additem "estado1"
cbx_estado.Additem "estado2"
cbx_estado.Additem "estado3"
cbx_estado.Additem "estado4"
cbx_ciudad.Additem "ciudad1"
cbx_ciudad.Additem "ciudad2"
cbx_ciudad.Additem "ciudad3"
cbx_ciudad.Additem "ciudad4"
'Asi sucesivamente con todas las cuidades que necesites.
End sub
'Doble click en el cbx_estado y programamos:
Private sub cbx_estado_change()
lbl_estado.caption = cbx_estado.value
End sub
'Doble click en el cbx_ciudad y programamos:
Private sub cbx_ciudad_change()
lbl_ciudad.caption = cbx_ciudad.value
End sub
'Ahora nos vamos al boton cmd_aceptar y lo programamos de la siguiente manera:
Private sub cmd_aceptar_click()
'Suponemos que los titulos eestán en la fila 4 de las A a la K. Nombre de la hoja regllamadas
'Suponemos que el formulario está en la hoja 1 del mismo libro.
Sheets("regllamadas").Actiate
Activesheet.Range("a4").Activate
'Mientras la celda no este vacia que baje una fila:
Do While not isEmpty(Activecell)
Activecell.offset(1,0).Activate
Loop
'Ahora insertamos los datos:
Activecell=lbl_estado.value
Activecell.offset(0,1)=lbl_ciudad.value
activecell.offset(0,2) = txt_prestador.value
activecell.offset(0,3) = txt_destino.value
activecell.offset(0,4) = txt_fecha.value
activecell.offset(0,5) = txt_hora.value
activecell.offset(0,6) = txt_recibidor.value
activecell.offset(0,7) = txt_motivo.value
activecell.offset(0,8) = txt_nombre.value
activecell.offset(0,9) = txt_motivo.value
activecell.offset(0,10) = txt_observaciones.value
'Una vez insertados los datos, guardamos el libro activo y lo cerramos:
ActiveWorkbook. Sabe
Activeworkbook. Close
End Sub
Una cosa que se me olvido, si quieres antes de guardar el libro puedes limpiar los textbox, labels y combos. Justo antes de guardar el libro colocamos los siuguiente:
'Limpiamos los textbox, labels y combos y mandamos al principio el cursor para captar datos nuevos:
lbl_estado=""
lbl_ciudad=""
cbx_estado=""
cbx_ciudad=""
Txt_prestador = ""
Txt_telefono = ""
Txt_fecha = ""
Txt_hora = ""
Txt_recibidor = ""
Txt_motivo = ""
Txt_nombre = ""
Txt_accion = ""
Txt_observaciones = ""
TextIPS. SetFocus
Todo perfecto, tal como lo mencioné arriba en mi exposición.
Tal vez no me explique bien. Todo funciona tal como tengo arriba, ¿cuál el problema?
Inserto, se inserta en la primera linea vacía (A5)
Inserto el segundo, aqui deveria insertar en la A6 (primera vacia) pero aunque este selecionada la celda A6, se inserta en A5 siempre, es decir;
Cuando insertas SIEMPRE inserta en la A5 y no en la primera vacía.
Quiero que inserte en la primera vacía
Este es el problema
Te pongo el código que tu tienes con alguna modificación a ver si te sirve. Lo que está en negrita es lo que yo cambiaría.
Private Sub Cbx_Estado_Change()
Application.ScreenUpdating = False
'Llenamos el cbx_Ciudad al recibir el foco, pero antes lo limpiamos
Cbx_Ciudad.Clear
'seleccionamos la hoja1
Hoja2.Select
'Miramos lo que hay seleccionado en el Cbx_Estado Listindex + 1 nos devuelve la columna del estado,
'porque el listindex empieza siempre por cero
COLUMNA = Cbx_Estado.ListIndex + 1
If COLUMNA = 0 Then Exit Sub
'seleccionamos la celda que proceda, a partir de la segunda fila
Cells(2, COLUMNA).Select
'Vamos a llenar dinámicamente el Cbx_Ciudad dependiendo del país elegido
Do While Not IsEmpty(ActiveCell)
Activecell.offset(1,0).Activate
Loop
    'Añadimos los nombres de las ciudades al Cbx_Ciudad
    Cbx_Ciudad.AddItem ActiveCell
    ActiveCell.Offset(1, 0).Select 'Bajamos una fila
Hoja1.Select
Application.ScreenUpdating = True
End Sub
Saludos, si tienes algún problema me comentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas