Registros de useforms pasarlos a hoja

Como le puedo hacer para pasar todos los labels y comboboxs de de mi formulario a una hoja determinada al apretar el botón guardar, ya tengo el código solo que este me pasa solo una fila.

De antemano muchas gracias por su ayuda.

Option Explicit

Private Sub TEMAS_AfterUpdate()
Dim FILA, FINAL, I, COLUMNA, I2, FINAL2 As Long
Dim LISTA As String

'ENCONTRAR LA ULTIMA COLUMNA OCUPADA
COLUMNA = 3
Do While Hoja2.Cells(1, COLUMNA) <> Empty
COLUMNA = COLUMNA + 1
Loop
FINAL = COLUMNA - 1
'LIMPIA EL COMBOBOX SUBTEMAS
SUBTEMAS.Clear
'HACE UN RECORRIDO EN TODOS LOS CAMPOS DE LOS TEMAS
For I = 3 To FINAL
'COMPARA EL DATO QUE SE ELIGIÓ EN EL COMBOBOX TEMAS CON EL DATO QUE SE ENCUENTRA EN LA INTENTAR DE LA COLUMNA RECORRIDA
If TEMAS = Hoja2.Cells(1, I) Then
'ENCONTRAR LA ULTIMA FILA OCUPADA, EN LA COLUMNA DE LA VARIABLE I
FILA = 2
Do While Hoja2.Cells(FILA, I) <> Empty
FILA = FILA + 1
Loop
FINAL2 = FILA - 1
'HACE UN RECORRIDO EN LAS FILAS PERTENECIENTES A LA COLUMNA CON LA VARIABLE I
For I2 = 2 To FINAL2
LISTA = Hoja2.Cells(I2, I)
SUBTEMAS.AddItem (LISTA)
Next I2
End If
Next I

End Sub
Private Sub UserForm_Initialize()
Dim FILA, FINAL, I As Long
Dim LISTA As String
'ComboBox1.AddItem "COMBOBOX"
'ComboBox1.AddItem "LISTBOX"
'ComboBox1.AddItem "CHECKBOX"
'ComboBox1.AddItem "OPTIONBUTTON"

FILA = Hoja2.Range("A" & Rows.Count).End(xlUp).Row + 1
FINAL = FILA - 1

For I = 2 To FINAL
LISTA = Hoja2.Cells(I, 1)
TEMAS.AddItem (LISTA)
Next I

End Sub

'Botón Guardar
Private Sub CommandButton1_Click()
Dim NombreHoja As String
Dim HojaDestino As Range
Dim NuevaFila As Integer
NombreHoja = Me.TEMAS.Value
Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A1").CurrentRegion
NuevaFila = HojaDestino.Rows.Count + 1
With ThisWorkbook.Sheets(NombreHoja)
.Cells(NuevaFila, 1).Value = Me.TEMAS.Value
.Cells(NuevaFila, 2).Value = Me.SUBTEMAS.Value
.Cells(NuevaFila, 2).Value = CDate(SUBTEMAS.Text)
.Cells(NuevaFila, 3).Value = Me.Label14
.Cells(NuevaFila, 4).Value = Me.TextBox1.Value
.Cells(NuevaFila, 5).Value = Me.TextBox2.Value
.Cells(NuevaFila, 6).Value = Me.TextBox3.Value
.Cells(NuevaFila, 7).Value = Me.TextBox4.Value
.Cells(NuevaFila, 8).Value = Me.ComboBox3.Value
.Cells(NuevaFila, 1).Value = Me.TEMAS.Value
.Cells(NuevaFila, 2).Value = Me.SUBTEMAS.Value
.Cells(NuevaFila, 2).Value = CDate(SUBTEMAS.Text)
.Cells(NuevaFila, 3).Value = Me.Label15
.Cells(NuevaFila, 4).Value = Me.TextBox5.Value
.Cells(NuevaFila, 5).Value = Me.TextBox2.Value
.Cells(NuevaFila, 6).Value = Me.TextBox7.Value
.Cells(NuevaFila, 7).Value = Me.TextBox8.Value
.Cells(NuevaFila, 8).Value = Me.ComboBox5.Value
.Cells(NuevaFila, 1).Value = Me.TEMAS.Value
.Cells(NuevaFila, 2).Value = Me.SUBTEMAS.Value
.Cells(NuevaFila, 2).Value = CDate(SUBTEMAS.Text)
.Cells(NuevaFila, 3).Value = Me.Label16
.Cells(NuevaFila, 4).Value = Me.TextBox9.Value
.Cells(NuevaFila, 5).Value = Me.TextBox10.Value
.Cells(NuevaFila, 6).Value = Me.TextBox11.Value
.Cells(NuevaFila, 7).Value = Me.TextBox12.Value
.Cells(NuevaFila, 8).Value = Me.ComboBox13.Value
End With
MsgBox "Alta exitosa.", vbInformation, "EXCELeINFO"
Unload Me
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub

1 respuesta

Respuesta
3

Puede ser así:

Private Sub CommandButton1_Click()
'Botón Guardar
  Dim NuevaFila As Integer
  '
  With ThisWorkbook.Sheets(Me.TEMAS.Value)
    NuevaFila = .Range("A" & Rows.Count).End(3).Row + 1
    .Cells(NuevaFila, 1).Value = Me.TEMAS.Value
    .Cells(NuevaFila, 2).Value = Me.SUBTEMAS.Value    'está repetida la columna 2
    .Cells(NuevaFila, 2).Value = CDate(SUBTEMAS.Text) 'está repetida la columna 2
    .Cells(NuevaFila, 3).Value = Me.Label14
    .Cells(NuevaFila, 4).Value = Me.TextBox1.Value
    .Cells(NuevaFila, 5).Value = Me.TextBox2.Value
    .Cells(NuevaFila, 6).Value = Me.TextBox3.Value
    .Cells(NuevaFila, 7).Value = Me.TextBox4.Value
    .Cells(NuevaFila, 8).Value = Me.ComboBox3.Value
    '
    NuevaFila = NuevaFila + 1
    .Cells(NuevaFila, 1).Value = Me.TEMAS.Value
    .Cells(NuevaFila, 2).Value = Me.SUBTEMAS.Value
    .Cells(NuevaFila, 2).Value = CDate(SUBTEMAS.Text)
    .Cells(NuevaFila, 3).Value = Me.Label15
    .Cells(NuevaFila, 4).Value = Me.TextBox5.Value
    .Cells(NuevaFila, 5).Value = Me.TextBox2.Value  'aquí debe ser 6
    .Cells(NuevaFila, 6).Value = Me.TextBox7.Value
    .Cells(NuevaFila, 7).Value = Me.TextBox8.Value
    .Cells(NuevaFila, 8).Value = Me.ComboBox5.Value
    '
    NuevaFila = NuevaFila + 1
    .Cells(NuevaFila, 1).Value = Me.TEMAS.Value
    .Cells(NuevaFila, 2).Value = Me.SUBTEMAS.Value
    .Cells(NuevaFila, 2).Value = CDate(SUBTEMAS.Text)
    .Cells(NuevaFila, 3).Value = Me.Label16
    .Cells(NuevaFila, 4).Value = Me.TextBox9.Value
    .Cells(NuevaFila, 5).Value = Me.TextBox10.Value
    .Cells(NuevaFila, 6).Value = Me.TextBox11.Value
    .Cells(NuevaFila, 7).Value = Me.TextBox12.Value
    .Cells(NuevaFila, 8).Value = Me.ComboBox13.Value
  End With
  MsgBox "Alta exitosa.", vbInformation, "EXCELeINFO"
End Sub

---

O podría simplificarse todavía así:

Private Sub CommandButton1_Click()
'Botón Guardar
  Call AgregarFila(Label14, TextBox1, TextBox2, TextBox3, TextBox4, ComboBox3)
  Call AgregarFila(Label15, TextBox5, TextBox6, TextBox7, TextBox8, ComboBox5)
  Call AgregarFila(Label16, TextBox9, TextBox10, TextBox11, TextBox12, ComboBox13)
  MsgBox "Alta exitosa.", vbInformation, "EXCELeINFO"
End Sub
Sub AgregarFila(ctr1 As MSForms.Label, ctr2 As MSForms.TextBox, ctr3 As MSForms.TextBox, _
                ctr4 As MSForms.TextBox, ctr5 As MSForms.TextBox, ctr6 As MSForms.ComboBox)
  Dim NuevaFila As Long
  With ThisWorkbook.Sheets(Me.TEMAS.Value)
    NuevaFila = .Range("A" & Rows.Count).End(3).Row + 1
    .Cells(NuevaFila, 1).Value = Me.TEMAS.Value
    .Cells(NuevaFila, 2).Value = Me.SUBTEMAS.Value    'está repetida la columna 2
    .Cells(NuevaFila, 2).Value = CDate(SUBTEMAS.Text) 'está repetida la columna 2
    .Cells(NuevaFila, 3).Value = ctr1.Caption
    .Cells(NuevaFila, 4).Value = ctr2.Value
    .Cells(NuevaFila, 5).Value = ctr3.Value
    .Cells(NuevaFila, 6).Value = ctr4.Value
    .Cells(NuevaFila, 7).Value = ctr5.Value
    .Cells(NuevaFila, 8).Value = ctr6.Value
  End With
End Sub

[Bienvenido a todoexpertos.

Si en subtema tienes una fecha, entonces puede simplificarse de esta manera:

Private Sub CommandButton1_Click()  'Botón Guardar
  Call AgregarFila(Array("", TEMAS.Value, CDate(SUBTEMAS.Text), Label14.Caption, TextBox1.Value, TextBox2.Value, TextBox3.Value, TextBox4.Value, ComboBox3.Value))
  Call AgregarFila(Array("", TEMAS.Value, CDate(SUBTEMAS.Text), Label15.Caption, TextBox5.Value, TextBox6.Value, TextBox7.Value, TextBox8.Value, ComboBox5.Value))
  Call AgregarFila(Array("", TEMAS.Value, CDate(SUBTEMAS.Text), Label16.Caption, TextBox9.Value, TextBox10.Value, TextBox11.Value, TextBox12.Value, ComboBox13.Value))
  MsgBox "Alta exitosa.", vbInformation, "EXCELeINFO"
End Sub
'
Sub AgregarFila(arr As Variant)
  Dim NuevaFila As Long, i As Long
  With ThisWorkbook.Sheets(Me.TEMAS.Value)
    NuevaFila = .Range("A" & Rows.Count).End(3).Row + 1
    For i = 1 To UBound(arr)
      .Cells(NuevaFila, i).Value = arr(i)
    Next
  End With
End Sub

[Al final de la respuesta hay un botón para valorar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas