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
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.
- Compartir respuesta