Insertar Datos de forma horizontal uno tras otro con formulario

Soy nuevo en el mundo de las macros y estoy intentando programar una macro para transponer los registros en un formulario en una base de datos (un registro bajo el otro), sin embargo me arroja un error: "Else sin if"

Private Sub CommandButton1_Click()
If ComboBox1 = "" Or ComboBox2 = "" Or TextBox1 = "" Or TextBox2 = "" Then MsgBox "¡¡Cuidado!! Faltan campos por llenar", vbInformation, "Error de captura"
Else
Sheets("Entradas LBI").Select
Range("A" & Cells.Row.Count).End(x1Up).Offset(1).Select
    ActiveCell = ComboBox1.Value
    ActiveCell.Offset(0, 1) = ComboBox1.Value
    ActiveCell.Offset(0, 2) = ComboBox2.Value
    ActiveCell.Offset(0, 3) = TextBox1.Value
    ActiveCell.Offset(0, 4) = TextBox2.Value
    ActiveCell.Offset(0, 5) = TextBox3.Value
    MsgBox "Contacto Guardado con Exito", vbOKOnly, "Registro"
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    TextBox5 = ""
    TextBox6 = ""
    End If
End Sub

La macro deberia insertar los valores uno tras otro generando a su vez un nuevo numero correlativo (51,52,53,54, etc)

2 respuestas

Respuesta
1

Jesús Salas, prueba con esta modificación de tu código.

Private Sub CommandButton1_Click()
If ComboBox1 = "" Or ComboBox2 = "" Or TextBox1 = "" Or TextBox2 = "" Then
MsgBox "¡¡Cuidado!! Faltan campos por llenar", vbInformation, "Error de captura"
Exit Sub
Else
Dim Hoja As String
Dim Fil, Fin As Integer
Application.ScreenUpdating = False
Hoja = "Entradas LBI"
    Fil = 3
    Do While Sheets(Hoja).Cells(Fil, 1) <> ""
        Fil = Fil + 1
    Loop
    Fin = Fil
        For Fil = 3 To Fin
                Sheets(Hoja).Cells(Fin, 2) = ComboBox1.Value
                Sheets(Hoja).Cells(Fin, 3) = ComboBox2.Value
                Sheets(Hoja).Cells(Fin, 4) = TextBox1.Value
                Sheets(Hoja).Cells(Fin, 5) = TextBox2.Value
                Sheets(Hoja).Cells(Fin, 6) = TextBox3.Value
    Exit For
    Next
    End If
Range("A3").Select
Cells(ActiveCell.Row, 1) = 1
Range(Cells(ActiveCell.Row, 1), Range("B65536").End(xlUp).Offset(, -1)).DataSeries
Application.ScreenUpdating = True
    MsgBox "Contacto Guardado con Exito", vbOKOnly, "Registro"
    ComboBox1 ""
    ComboBox2 ""
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
End Sub

Comenta si te sirvió.

¡Gracias! 
Muchas Gracias Ahrens, Funcionó muy bien, Gracias!, lo que me gustaría saber es si es posible Pedirle a VBA que sin importar en qué Hoja de calculo me encuentre siempre genere el resultado a la hoja de cálculo "Entradas LBI" y por último si es que se le puede indicar que al generar el resultado le coloque a las celdas "Todos los Bordes". 
Gracias nuevamente!

El tema de los bordes lo solucioné añadiendo unas cuantas líneas al código que me enviaste Ahrens, me funcionó pero supongo que quizá hay una forma más sencilla de hacerlo (o no sé)

Private Sub CommandButton1_Click()
If ComboBox1 = "" Or ComboBox2 = "" Or TextBox1 = "" Or TextBox2 = "" Then
MsgBox "¡¡Cuidado!! Faltan campos por llenar", vbInformation, "Error de captura"
Exit Sub
Else
Dim Hoja As String
Dim Fil, Fin As Integer
Application.ScreenUpdating = False
Hoja = "Entradas LBI"
    Fil = 3
    Do While Sheets(Hoja).Cells(Fil, 1) <> ""
        Fil = Fil + 1
    Loop
    Fin = Fil
        For Fil = 3 To Fin
                Sheets(Hoja).Cells(Fin, 2) = ComboBox1.Value
                Sheets(Hoja).Cells(Fin, 3) = ComboBox2.Value
                Sheets(Hoja).Cells(Fin, 4) = TextBox1.Value
                Sheets(Hoja).Cells(Fin, 5) = TextBox2.Value
                Sheets(Hoja).Cells(Fin, 6) = TextBox3.Value
                Sheets(Hoja).Cells(Fin, 2).Borders.LineStyle = xlContinuous
                Sheets(Hoja).Cells(Fin, 3).Borders.LineStyle = xlContinuous
                Sheets(Hoja).Cells(Fin, 4).Borders.LineStyle = xlContinuous
                Sheets(Hoja).Cells(Fin, 5).Borders.LineStyle = xlContinuous
                Sheets(Hoja).Cells(Fin, 6).Borders.LineStyle = xlContinuous
    Exit For
    Next
    End If
Range("A3").Select
Cells(ActiveCell.Row, 1) = 1
Range(Cells(ActiveCell.Row, 1), Range("B65536").End(xlUp).Offset(, -1)).DataSeries
Application.ScreenUpdating = True
    MsgBox "Contacto Guardado con Exito", vbOKOnly, "Registro"
    ComboBox1 = ""
    ComboBox2 = ""
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
End Sub

Solo me estaría faltando "Direccionar" La macro unicamente para que registre los datos en la hoja de calculo especifica, sin importar que esté ubicado en cualquier otra hoja de calculo.

Jesús Salas quita este código

Range("A3").Select
Cells(ActiveCell.Row, 1) = 1
Range(Cells(ActiveCell.Row, 1), Range("B65536").End(xlUp).Offset(, -1)).DataSeries

y agrega este

Dim Correl As Integer
   Correl = Sheets(Hoja).Range("A" & Rows.Count).End(xlUp).Row + 1
   If Correl > 1 Then
      Sheets(Hoja).Range("A" & Correl) = Sheets(Hoja).Range("A" & Correl - 1) + 1
   End If
Revisa si te funciona agregando datos desde cualquier hoja. (

¡Gracias!
Muchas Gracias Ahrens logré lo que necesitaba, me gustaría poder entender a detalle cada una de las líneas que enviaste hay algunas con las que aún no estoy familiarizado, pero seguiré practicando para poder aportar también en el Foro, Muchas Gracias!

Respuesta
1

Te explico cómo funciona la sentencia If Then Else End if

Por ejemplo.

Vamos asignar un valor a la variable x. Después hacemos la pregunta con If

x = 1
if x = 1 then Msgbox "La variable igual a 1"

Como te puedes dar cuenta en una sola línea tengo el If y el resultado de Then


Pero lo podemos hacer en 3 líneas:

x = 1
if x = 1 tnen
   msgbox "La variable igual a 1"
end if

En el ejemplo anterior el resultado lo puse en una línea después del Then


Ahora vamos a introducir el else

x = 1
if x = 1 then msgbox "La variable igual a 1" Else msgbox "Es diferente de 1"

También en una sola línea puedes poner Then y Else


Vamos a ver cómo se ve en diferentes líneas

x = 1
if x = 1 then
   msgbox "La variable igual a 1" 
else
   msgbox "Es diferente de 1"
end if

Cuando las instrucciones son cortas se puede utilizar en una sola línea, pero cuando vas a poner varias instrucciones, lo recomendable es hacerlo en líneas separadas para darle mayor claridad.


En tu caso pusiste esto:

If ComboBox1 = "" Or ComboBox2 = "" Or TextBox1 = "" Or TextBox2 = "" Then MsgBox "¡¡Cuidado!! Faltan campos por llenar", vbInformation, "Error de captura"

Estás poniendo el resultado en una sola línea, y ahí se termina la instrucción.

El Else que tienes en la siguiente línea está solo sin un IF, es por eso que te envía el error: "Else sin if".


También tienes error en esta línea:

Range("A" & Cells. Row. Count).End(x1Up). Offset(1).Select

Estás poniendo Row y debe ser Rows (para contar el número de filas).

También pusiste x1up (pusiste uno y debe ser la letra l -ele-)


El problema se resuelve si pones el resultado del Then en la siguiente línea:

Private Sub CommandButton1_Click()
    If ComboBox1 = "" Or ComboBox2 = "" Or TextBox1 = "" Or TextBox2 = "" Then
        MsgBox "¡¡Cuidado!! Faltan campos por llenar", vbInformation, "Error de captura"
    Else
        Sheets("Entradas LBI").Select
        Range("A" & Rows.Count).End(xlUp).Offset(1).Select
        ActiveCell = ComboBox1.Value
        ActiveCell.Offset(0, 1) = ComboBox1.Value
        ActiveCell.Offset(0, 2) = ComboBox2.Value
        ActiveCell.Offset(0, 3) = TextBox1.Value
        ActiveCell.Offset(0, 4) = TextBox2.Value
        ActiveCell.Offset(0, 5) = TextBox3.Value
        MsgBox "Contacto Guardado con Exito", vbOKOnly, "Registro"
        TextBox1 = ""
        TextBox2 = ""
        TextBox3 = ""
        TextBox4 = ""
        TextBox5 = ""
        TextBox6 = ""
    End If
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

¡Gracias! 
Funcionó muy bien dante, muchas gracias por tu ayuda!. El unico detalle sería que ésta acción se generaría sin exclusión a la hoja de calculo en la que esté ubicado, osea no sería exclusiva para, en mi caso "ENTRADAS LBI". Lo otro seria que tampoco continua la cuenta una tras otra al generarse la nueva fila (51,52,53,54, etc)

¿Ya lo probaste?

Con esta instrucción, le estás diciendo que seleccione la hoja y después empiece a poner datos.

Sheets("Entradas LBI").Select

Con esta instrucción, va avanzando de línea en línea:

Range("A" & Rows.Count).End(xlUp).Offset(1).Select

¡Gracias Por ayudarme con la explicación detallada, me sirvió Muchísimo! 
Si, claro que funciona dante, solo faltaría añadirle el correlativo de suma a la columna "ÍTEM" para que avance el numero de uno en uno conforme se cree una nueva fila y pues finalmente que ésta macro se ejecute en una misma Hoja de calculo(Base de datos) sin importar que el botón Interactivo que incluya la macro esté en otra Hoja de calculo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas