Copiar datos a hojas desde formulario con 2 paginas

Tengo un UserForm que quiero utilizar como formulario, para introducir datos a dos hojas distintas (Hoja1 y Hoja2); de tal manera que los datos que introduzca en los distintos TextBox y ComboBox, de la "Page1" del UserForm se copien en la Hoja1; y los datos introducidos en la "Page2" del mismo UserForm, se copien en la Hoja2.

¿Cómo se hace eso?

1 respuesta

Respuesta
1

Vas pasando uno x uno como si fuese 1 sola hoja.

Por ej. si los Textbox1 a 2 van a hoja 1 y los Textbox3 y 4 a la hoja 2, las líneas serían:

Sheets("Hoja1").Cells(fila,col) = textbox1

Sheets("Hoja1").Cells(fila,col) = textbox2

Sheets("Hoja2").Cells(filax,colx) = textbox3

Sheets("Hoja2").Cells(filax,colx) = textbox4

Por supuesto irás variando las filas y col de cada hoja

Si por alguna razón necesitas identificar de que página estás pasando el dato, pode´s utilizar estas instrucciones:

Sheets("Hoja1").Range("A23") = MultiPage1.Pages(0).TextBox1
Sheets("Hoja2").Range("A23") = MultiPage1.Pages(1).TextBox3

PD) Te invito a visitar la sección Manuales de mi sitio.

Voy a intentar utilizar este código, a ver si me sale y te cuento. Una cosa más, para el caso de los OptionButton, se hace igual o cambia algo. Te pregunto esto puesto que, como sabes, aunque sean varias los opciones, eliges una y se copiaría en una única celda.

Gracias.

Saludos.

He probado con este código:

Private Sub cmdRegistra_Click()
Sheets("Hoja1").Select
t = Cells(Rows.Count, 1).End(xlUp).Row
Cells(t + 1, 1) = TextBox1.Text
'Cells(t + 1, 2) = DatePicker1 'Este no lo grabo de momento
Cells(t + 1, 3) = TextBox2.Text
Cells(t + 1, 4) = ComboBox1.Value
Cells(t + 1, 5) = ComboBox2.Value
Cells(t + 1, 6) = ComboBox3.Value
Cells(t + 1, 7) = OptionButton1.Caption
Cells(t + 1, 7) = OptionButton2.Caption
Cells(t + 1, 7) = OptionButton3.Caption
Cells(t + 1, 8) = ComboBox4.Value
TextBox1.Text = ""
TextBox2.Text = ""
ComboBox1.Value = ""
ComboBox2.Value = ""
ComboBox3.Value = ""
OptionButton1 = Empty
OptionButton2 = Empty
OptionButton3 = Empty
End Sub

Problemas detectados:

Funciona bien, hasta que llega a los OptionButton, que siempre me graba el OptionButton3, elija el que elija. Otra cosa que me ocurre y no se porqué, es que doy al CommandButton "cmdRegistra", me desaparecen los datos puestos y no los graba hasta que no activo el CommandButton, denominado "cmdSalir"

Código cmdSalir:

Private Sub cmdSalir_Click()
Unload Me
End Sub

Otra cuestión: Todo esto se encuentra en la "Page1" del UserForm que utilizo para grabar estos datos. Ahora lo que quiero es que los datos que introduzca en la "Page2" de este mismo UserForm, se me graben en la Hoja2. Cómo lo hago.

Saludos.

Vayamos por partes:

Si tenés 2 botones de guardado, uno en cada page, cada uno tendrá su nombre y llevará a la hoja correspondiente el contenido de los controles de su page.

Resumiendo, tendrás 2 rutinas similares a Private Sub cmdRegistra_Click()

Donde al inicio se selecciona la hoja a la que debe volcarse los datos.

Si tenés 1 solo botón de guardado, a continuación de tus instrucciones van las otras, por ej:

Private Sub cmdRegistra_Click()
Sheets("Hoja1").Select
t = Cells(Rows.Count, 1).End(xlUp).Row
Cells(t + 1, 1) = TextBox1.Text

'todas las que tenés en tu rutina y a continuación

Sheets("Hoja2").Select
t = Cells(Rows.Count, 1).End(xlUp).Row
Cells(t + 1, 1) = TextBox11.Text

'a continuación el resto para la Hoja2

End Sub


Los optionbutton se cancelan entre sí, es decir que solo habrá 1 tildado y por lo tanto debes evaluar si está en Verdadero o no de este modo:

If Optionbutton1.value = True then Cells(t + 1, 7) = OptionButton1.Caption

If Optionbutton2.value = True then Cells(t + 1, 7) = OptionButton2.Caption

If Optionbutton3.value = True then Cells(t + 1, 7) = OptionButton3.Caption


PD) Cuando realices 1 consulta deja 1 solo tema por entrada y si ya tenés un código debieras copiarlo para que podamos ajustarlo. Sinó les estamos enviando otro código y luego no pueden adaptarlo o hacer un mix entre los 2.

Cuando finalices esta consulta dejá otra indicando en el cuerpo del mensaje que es para mí y te explicaré cómo limpiar los controles con solo 2 o 3 líneas en lugar de todas las que tenés.


Sdos

Elsa

http://aplicaexcel.galeon.com/manual_UF2010.htm


Disculpa, ignoraba el procedimiento. Este es todo el código que tengo. Encima de cada código te pongo si funciona o no.

Funciona

Private Sub cmdRegistra_Click()
Sheets("Hoja1").Select
t = Cells(Rows.Count, 1).End(xlUp).Row
Cells(t + 1, 1) = TextBox1.Text
'Cells(t + 1, 2) = DatePicker1
Cells(t + 1, 3) = TextBox2.Text
Cells(t + 1, 4) = ComboBox1.Value
Cells(t + 1, 5) = ComboBox2.Value
Cells(t + 1, 6) = ComboBox3.Value
If OptionButton1.Value = True Then Cells(t + 1, 7) = OptionButton1.Caption
If OptionButton2.Value = True Then Cells(t + 1, 7) = OptionButton2.Caption
If OptionButton3.Value = True Then Cells(t + 1, 7) = OptionButton3.Caption
Cells(t + 1, 8) = ComboBox4.Value
TextBox1.Text = ""
TextBox2.Text = ""
ComboBox1.Value = ""
ComboBox2.Value = ""
ComboBox3.Value = ""
OptionButton1 = Empty
OptionButton2 = Empty
OptionButton3 = Empty
End Sub

No Funciona
Private Sub cmd1Registra_Click()
Sheets("Hoja1").Select
t = Cells(Rows.Count, 1).End(xlUp).Row
Cells(t + 1, 1) = TextBo3.Text
'Cells(t + 1, 2) = DatePicker1
Cells(t + 1, 3) = TextBox4.Text
Cells(t + 1, 4) = ComboBox5.Value
Cells(t + 1, 5) = ComboBox6.Value
Cells(t + 1, 6) = ComboBox7.Value
If OptionButton4.Value = True Then Cells(t + 1, 7) = OptionButton4.Caption
If OptionButton5.Value = True Then Cells(t + 1, 7) = OptionButton5.Caption
Cells(t + 1, 8) = ComboBox8.Value
Cells(t + 1, 9) = ComboBox9.Value
TextBox3.Text = ""
TextBox4.Text = ""
ComboBox5.Value = ""
ComboBox6.Value = ""
ComboBox7.Value = ""
ComboBox8.Value = ""
ComboBox9.Value = ""
OptionButton4 = Empty
OptionButton5 = Empty
End Sub

Funciona

Private Sub ComboBox1_Click()
Application.ScreenUpdating = False
ComboBox3.Clear
valor = ComboBox1.Value
Set busca = Sheets("hoja3").Range("b1:f1").Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
busca.Offset(1, 0).Select
Do While ActiveCell.Value <> ""
ComboBox3.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop
End If
End Sub

Funciona

Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
Sheets("hoja3").Select
Range("a2").Select
Do While ActiveCell.Value <> ""
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop
End Sub


Private Sub UserForm_Activate() 'FUNCIONA
Sheets("Hoja3").Select 'FUNCIONA

Range("F1").Select 'FUNCIONA
Do While ActiveCell.Value <> "" 'FUNCIONA
ComboBox2.AddItem ActiveCell 'FUNCIONA
ActiveCell.Offset(1, 0).Select 'FUNCIONA
Loop
Do While ActiveCell.Value <> ""
ComboBox6.AddItem ActiveCell 'NO FUNCIONA
ActiveCell.Offset(1, 0).Select 'NO FUNCIONA
Loop
End Sub

Funciona

Private Sub cmdSalir_Click()
Unload Me
End Sub

Funciona
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Sheets("Hoja1").Select
End Sub


No Funciona

Private Sub ComboBox5_Click()
Application.ScreenUpdating = False
ComboBox7.Clear
valor = ComboBox5.Value
Set busca = Sheets("hoja3").Range("b1:f1").Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
busca.Offset(1, 0).Select
Do While ActiveCell.Value <> ""
ComboBox7.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop
End If
End Sub

Esto es lo que tengo.

Saludos

TE comento las que NO Funcionan:

1 - cmdRegistra es un botón que vuelca datos a la Hoja1, me parece que es el del Page1

Si en el Page2 tenés otro botón llamado cmd1Registra, y debe volcar a la Hoja2, cambiá la 1er línea y seleccioná la Hoja2

Private Sub cmd1Registra_Click()

Sheets("Hoja2").Select


PD) Hacé doble clic en el botón del page2 para que te pase a la sección Código y verifiques así que el nombre está correcto.


2a - Private Sub UserForm_Activate() 'FUNCIONA
Sheets("Hoja3").Select 'FUNCIONA
Range("F1").Select 'FUNCIONA
Do While ActiveCell.Value <> "" 'FUNCIONA
ComboBox2.AddItem ActiveCell 'FUNCIONA
ActiveCell.Offset(1, 0).Select 'FUNCIONA
Loop
'HASTA AQUÍ SE LLENÓ EL COMBOBOX2 CON DATOS DE LA COL F DE HOJA3
'YA NO HAY DATOS MÁS ABAJO.....
'Si necesitas llenar el combobox6 con LOS MISMOS DATOS se puede hacer todo
'en el mismo bucle anterior


Private Sub UserForm_Activate() 'FUNCIONA
Sheets("Hoja3").Select 'FUNCIONA
Range("F1").Select 'FUNCIONA
Do While ActiveCell.Value <> "" 'FUNCIONA
ComboBox2.AddItem ActiveCell 'FUNCIONA
ComboBox6.AddItem ActiveCell

ActiveCell.Offset(1, 0).Select 'FUNCIONA
Loop

End Sub

2b - Si el Combobox6 se llena con otros datos, hay que seleccionar la col previamente.

Por ejemplo:

Private Sub UserForm_Activate() 'FUNCIONA
Sheets("Hoja3").Select 'FUNCIONA
Range("F1").Select 'FUNCIONA
Do While ActiveCell.Value <> "" 'FUNCIONA
ComboBox2.AddItem ActiveCell 'FUNCIONA
ActiveCell.Offset(1, 0).Select 'FUNCIONA
Loop
'HASTA AQUÍ SE LLENÓ EL COMBOBOX2 CON DATOS DE LA COL F DE HOJA3
'YA NO HAY DATOS MÁS ABAJO.....
'Ahora llenamos el Combobox6 con datos de col G
Range("G1").Select
Do While ActiveCell.Value <> ""
ComboBox6.AddItem ActiveCell 'NO FUNCIONA
ActiveCell.Offset(1, 0).Select 'NO FUNCIONA
Loop
End Sub

3 -  Private Sub ComboBox5_Click()

No hay razón para que esta rutina no funcione... se la vé correcta, ¿entiendo qué está en el page2 verdad?

¿En qué no funciona? ¿No muestra valores? ¿No llena el combobox7? ...

Muchas gracias por tu trabajo. Siento decirte que la parte de la Page2 no funciona. Tampoco carga los datos el ComboBox 5 y, por consiguiente, tampoco lo hace su Combo dependiente, el ComboBox7. Si te es más fácil, te envío el archivo y lo pruebas.

Saludos.

Si, mejor me lo envías ... podes copiar el correo que aparece en mi sitio, no olvides recordarme el tema que nos ocupa.

Ya te lo envié ajustado. No dejes la consulta sin finalizar.

Para nuevos temas podes dejar nuevas consultas y con mucho gusto te las iré respondiendo.

Sdos

Elsa

http://aplicaexcel.galeon.com/manual_UF2010.htm

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas