Activar una hoja de excel para ingresar datos desde un userform

Estoy haciendo una aplicación en excel para capturar diferente información, por ejemplo, capturo información de los empleados en un userform y estos datos se deben ir a la hoja "BASE", también capturo reportes de actvidades en otro userform, y estos datos se deben dirigir a la hoja "REPORTES, y así sucesivamente... Como en el libro de excel tengo la hoja BASE como activa, todo lo que capturo se descarga ahí, lo que quiero es que cuando seleccione el userform de reportes, me active la hoja REPORTES para que los datos se almacenen en la hoja correcta. Ojala me puedan ayudar...

1 respuesta

Respuesta
1

Con lo siguiente no importa cual hoja tengas activa, lo importante es siempre mencionar a cual hoja va destinada la información, por ejemplo:

Private Sub CommandButton1_Click()
    fila = Sheets("BASE").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("BASE").Range("A" & fila) = Textbox1
    Sheets("BASE").Range("B" & fila) = Combobox1
    Sheets("BASE").Range("C" & fila) = TextBox2
End Sub

Y para la hoja reportes:

Private Sub CommandButton2_Click()
    fila = Sheets("REPORTES").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("REPORTES").Range("A" & fila) = Textbox1
    Sheets("REPORTES").Range("B" & fila) = Combobox1
    Sheets("REPORTES").Range("C" & fila) = TextBox2
End Sub

Son ejemplos, deberás adaptarlos a tu formulario.

Incluso, la hoja puede estar oculta y puedes poner la información.

Saludos. Dante Amor

Recuerda valorar la respuesta.

Me funciona bien el código, sin embargo me coloca la información en la misma fila y si quiero agregar más, se encima la nueva información en la misma fila, lo que quiero es que me lo coloque en la fila siguiente vacía. Este es el código que utilizo.

Private Sub cmdguardar_Click()
Dim fecha As Date
Dim reporte As String
Dim guardia As String
Dim empresa As String
Dim turno As String
Dim obs As String
Dim ultimafila As Double

On Error Resume Next

fecha = txtfecha
reporte = txtreporte
guardia = cmbguardia
empresa = cmbempresa
turno = cmbturno
obs = txtobs

ultimafila = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count

'Cells(ultimafila + 1, 1) = fecha
'Cells(ultimafila + 1, 2) = reporte
'Cells(ultimafila + 1, 3) = guardia
'Cells(ultimafila + 1, 4) = empresa
'Cells(ultimafila + 1, 5) = turno
'Cells(ultimafila + 1, 6) = obs

fila = Sheets("Parte_agr").Range("A" & Rows.Count).End(xlUp).Row
Sheets("Parte_agr").Range("A" & fila) = fecha
Sheets("Parte_agr").Range("B" & fila) = reporte
Sheets("Parte_agr").Range("C" & fila) = guardia
Sheets("Parte_agr").Range("D" & fila) = empresa
Sheets("Parte_agr").Range("E" & fila) = turno
Sheets("Parte_agr").Range("F" & fila) = obs

ActiveWorkbook.Save
End

End Sub

Las filas que tienen ( ' ) son la que en un principio se codifico pero me mandaba la información a la hoja BASE.

Espero hacerme entender... gracias

El código quedaría de esta forma:

Private Sub cmdguardar_Click()
'Por.Dante Amor
    fila = Sheets("Parte_agr").Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("Parte_agr").Range("A" & fila) = CDate(txtfecha)
    Sheets("Parte_agr").Range("B" & fila) = txtreporte
    Sheets("Parte_agr").Range("C" & fila) = cmbguardia
    Sheets("Parte_agr").Range("D" & fila) = cmbempresa
    Sheets("Parte_agr").Range("E" & fila) = cmbturno
    Sheets("Parte_agr").Range("F" & fila) = txtobs
    ActiveWorkbook.Save
End Sub

En vba no es necesario declarar la variables, solamente en algunos casos. Se recomienda declarar las variables cuando utilizas la instrucción "Option Explicit", pero esto lo usas cuando el código es muy extenso y tienes muchas macros y muchas variables.

En tu caso puedes poner el dato del control del formulario (textbox, combobox, etc), directamente en la celda.

Y ya que estamos simplificando código, puedes establecer en una variable el objeto Hoja que vas a utilizar, quedaría de esta forma:

Private Sub cmdguardar_Click()
'Por.Dante Amor
    Set h1 = Sheets("Parte_agr")
    fila = h1.Range("A" & Rows.Count).End(xlUp).Row + 1
    h1.Range("A" & fila) = CDate(txtfecha)
    h1.Range("B" & fila) = txtreporte
    h1.Range("C" & fila) = cmbguardia
    h1.Range("D" & fila) = cmbempresa
    h1.Range("E" & fila) = cmbturno
    h1.Range("F" & fila) = txtobs
    ActiveWorkbook.Save
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

¡Muchas Gracias!, me gusta mucho la programación y he llevado algunos cursos, sin embargo hay detalles que aun no conozco o domino, es bueno aprender y tener a quien consultar cuando sea necesario, agradezco los tips y muchas gracias de nuevo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas