Copiar los datos de un Userform en una hoja de Excel
simkmil
Mensajes publicados
505
Fecha de registro
Estado
Miembro
Última intervención
-
simkmil Mensajes publicados 505 Fecha de registro Estado Miembro Última intervención -
simkmil Mensajes publicados 505 Fecha de registro Estado Miembro Última intervención -
Hola,
He preparado un bonito Userform y me gustaría que los datos se inscribieran en una hoja de Excel después de hacer clic en el botón 'guardar'. Pero no lo consigo.
Adjunto mi archivo, al menos su inicio...
Sub ArchiverBordereau()
'archivar los bordereaux en el resumen e incrementar el número de Bordereau
Dim ligne As Integer
Dim numBord As Integer
MsgBox "¿Ha hecho las impresiones que necesita?", vbOKOnly
ligne = Sheets("resumen").Range("A" & Rows.Count).End(xlUp).Row + 1 'desciendo una línea cada vez
numBord = TextBox1.Value
Sheets("resumen").Range("B" & ligne).Value = numBord
Sheets("resumen").Range("C" & ligne).Value = TextBox2.Value
Sheets("resumen").Range("D" & ligne).Value = TextBox7.Value
Sheets("resumen").Range("E" & ligne).Value = TextBox6.Value
End Sub
en mi USF tengo un botón "guardar", pero no sucede nada...
Perdón, pero por más que haga clic en el código "Basic", no consigo poner mi archivo correctamente!
Gracias por su ayuda
Configuración: Windows / Chrome 99.0.4844.84
He preparado un bonito Userform y me gustaría que los datos se inscribieran en una hoja de Excel después de hacer clic en el botón 'guardar'. Pero no lo consigo.
Adjunto mi archivo, al menos su inicio...
Sub ArchiverBordereau()
'archivar los bordereaux en el resumen e incrementar el número de Bordereau
Dim ligne As Integer
Dim numBord As Integer
MsgBox "¿Ha hecho las impresiones que necesita?", vbOKOnly
ligne = Sheets("resumen").Range("A" & Rows.Count).End(xlUp).Row + 1 'desciendo una línea cada vez
numBord = TextBox1.Value
Sheets("resumen").Range("B" & ligne).Value = numBord
Sheets("resumen").Range("C" & ligne).Value = TextBox2.Value
Sheets("resumen").Range("D" & ligne).Value = TextBox7.Value
Sheets("resumen").Range("E" & ligne).Value = TextBox6.Value
End Sub
en mi USF tengo un botón "guardar", pero no sucede nada...
Perdón, pero por más que haga clic en el código "Basic", no consigo poner mi archivo correctamente!
Gracias por su ayuda
Configuración: Windows / Chrome 99.0.4844.84
Enlaces relacionados:
- vba excel: insertar una imagen en un userform
- VBA Excel: copiar un dato de listbox a una celda
- listbox sin duplicados en un userform vba excel
- VBA [Excel] Recuperar el dato de un listbox en una fórmula
- Excel VBA - Navegar en un userform muy grande
- Creación de un directorio fotográfico mediante un userform de Excel
15 respuestas
-
yg_be Mensajes publicados 23437 Fecha de registro Estado Colaborador Última intervención Ambassadeur 1 588
hola,
explicaciones sobre las etiquetas de código: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Creo que no estás mirando en el lugar correcto. Los datos se registran, sin duda, no donde deseas.
¿Has revisado el valor deligne
?
Creo que no es la primera vez que te encuentras con este problema.
Es mejor escribir:ligne = Sheets("récapitulatif").Range("A" & Sheets("récapitulatif").Rows.Count).End(xlUp).Row + 1 -
Gracias por tu ayuda.
De hecho, ya he tenido este problema antes; pero esta vez tengo un userform mientras que antes tenía una hoja de pedido que vaciar al final y copiar en una segunda hoja de resumen.
He ido a buscar el código de este antiguo proyecto para inspirarme en este.
Ahora, acabo de corregir mi línea "ligne" como me lo aconsejaste y a este nivel funciona.
Pero se bloquea en el nivel de numBord. Lo eliminé y entonces se bloquea en el nivel de textBox7.
En comparación con mi antiguo programa, aquí he puesto los números de TextBox en lugar de las referencias de hoja ya que estoy en un Userform.Sub ArchiverBordereau() 'archivar los bordereaux en el resumen y incrementar el número de Bordereau Dim ligne As Integer Dim numBord As Integer MsgBox "¿Ha realizado las impresiones que necesita?", vbOKOnly ligne = Sheets("resumen").Range("A" & Sheets("resumen").Rows.Count).End(xlUp).Row + 1 ' bajo una línea cada vez 'numBord = TextBox1.Value Sheets("resumen").Range("B" & ligne).Value = numBord Sheets("resumen").Range("C" & ligne).Value = TextBox2.Value Sheets("resumen").Range("D" & ligne).Value = TextBox7.Value Sheets("resumen").Range("E" & ligne).Value = TextBox6.Value End Sub
Aunque he seguido al pie de la letra las explicaciones para implementar el código, aún no lo he conseguido.
Mi segundo problema:
he puesto un botón (CommandButton) en mi UserForm, pero no veo cómo hacer que dispare mi registro.
Gracias una vez más por tu ayuda. -
¡Eh no! No lo tengo. Así que lo agregaré de inmediato. Gracias
Pero ¿cómo "decir" a mi botón "guardar" que debe ejecutar el código?
Gracias -
¡En efecto!
Aquí tienes el enlace para obtener mi archivo completo.
En cuanto al código, no todo está terminado, pero cuando sepa cómo ingresar las primeras, el resto se hará fácilmente.
https://www.cjoint.com/c/LCFqkpGDf3I
Espero que con esto puedas ayudarme.
Gracias de nuevo.-
Tu código no está en el lugar correcto: está en un módulo, mientras que debería ser el código del UserForm.
Option Explicit Private Sub Enregistrer_Click() 'archivar los comprobantes en el resumen e incrementar el número de Comprobante Dim ligne As Integer Dim numBord As Integer MsgBox "¿Ha hecho las impresiones que necesita?", vbOKOnly ligne = Sheets("resumen").Range("b" & Sheets("resumen").Rows.Count).End(xlUp).Row + 1 ' bajo una línea cada vez numBord = TextBox1.Value Sheets("resumen").Range("B" & ligne).Value = numBord Sheets("resumen").Range("C" & ligne).Value = TextBox2.Value Sheets("resumen").Range("D" & ligne).Value = TextBox7.Value Sheets("resumen").Range("E" & ligne).Value = TextBox6.Value End Sub
-
-
¡Y bien, GRACIAS! Lo ignoraba. Es la primera vez que pongo en marcha un UserForm. Antes siempre he trabajado directamente en hojas... Pero me parecía que el uso de un UserForm era particularmente bueno.
Y sigo pensándolo. Ahora voy a poner mi código en el USF, probarlo y luego, si todo funciona correctamente, lo completaré.
Gracias por tu ayuda. -
¡Genial! Funciona a la perfección. He continuado con mi código y está funcionando perfectamente para los TextBox.
Sin embargo, busco cómo hacerlo con los CommandButton; me gustaría que cuando haga clic en un commandButton se registre, por ejemplo, una cruz (x) en la columna adhoc.
Mientras espero tu solución (estoy seguro de que llegará, estoy buscando por mi lado).
Un abrazo.-
¿De qué botones de comando se trata?
Si se trata de aquellos para el tipo de material a reparar, ¿no sería más lógico utilizar botones de opción en lugar de botones de comando? Al poner estos botones en el mismo grupo (dándoles el mismo nombre de grupo), solo se podrá marcar uno a la vez.
Luego, en el momento de guardar, el código VBA recuperará el/los botón/es marcados y pondrá una X en la(s) columna(s).
-
-
gracias, es exactamente lo que quería hacer. Así que voy a cambiar estos botones por botones de opción y voy a intentar hacer el grupo.
Gracias -
Gracias, estoy mirando. Ya he cambiado mis botones.
-
¡Genial! Ahora tengo dos grupos distintos y puedo hacer una elección en ambos grupos sin borrar el segundo.
Continuaré mañana... aún debo cambiar lo que se inscribe en mi hoja según el botón clicado (actualmente es verdadero o falso)
y luego, quisiera hacer una copia de seguridad para poder recuperar el informe.
Gracias, que tengas una buena noche y un excelente fin de semana. -
Gracias, el Repair Café es la semana que viene. Lo hacemos todos los segundos sábados del mes.
Comenzamos esto en junio con una primera prueba, paramos en julio y agosto y la primera "verdadera" sesión en septiembre. Cada mes tenemos un poco más de visitantes - 36 el mes pasado - y tenemos un excelente ambiente.
Desde el punto de vista informático, somos tres: un responsable de informática en una gran empresa, un informático independiente que trabaja con empresas (no tiene tienda) desde hace 20 años y... ¡yo, el aprendiz! Hago lo que sé hacer y sigo sus consejos para el resto.
También tenemos una costurera (¡82 años!), dos electronistas, un reparador de bicicletas y tres "repar'Tout" que se encargan de desmontar un aspirador, un aire acondicionado portátil, limpiarlo y volver a montarlo.
Es realmente una bonita organización que me ha llevado cada vez más a reparar en lugar de reemplazar. Especialmente dado todo lo que está subiendo actualmente.
Excelente fin de semana para ti también. Me voy a sumergir en mi programa y volveré hacia ti si es necesario.
¡Definitivamente, este foro es una gran invención! -
aquí estoy de nuevo...
He avanzado bastante en mi proyecto.
Ahora mi USF se abre al abrir mi expediente.
La hoja se llena correctamente, pero me gustaría que, con los botones de comando, pudiera reemplazar los FALSOS y VERDADEROS por nada y X (para verdadero). He buscado pero no he encontrado nada.
Luego, intenté imprimir mi USF, pero ocupa más de una página de ancho. No veo cómo adaptarlo a una hoja A4, salvo un consejo que vi en internet de hacer una captura de pantalla, ponerla en una hoja y luego imprimir esa hoja en las dimensiones correctas. Me parece un poco absurdo.
La última cosa, que no es en absoluto necesaria, pero sería bueno que la hora de la toma del recibo se indique automáticamente. Pero eso realmente no es importante.
Ya gracias por el trabajo que me ayudas a realizar.
Adjunto mi archivo.
https://www.cjoint.com/c/LDckuJoMmWI
gracias-
para los "X", haría:
if OptionButton1.Value then Sheets("recapitulativo").Range("I" & linea).Value = "X" end if
Supongo que no hay nada más que hacer, ya que toda la línea está vacía al principio.
En cuanto a la hora, yo eliminaría esto del userform y haría:Sheets("recapitulativo").Range("C" & linea).Value = Time ' hora
Para la impresión, no tengo mucha experiencia con esto, pienso en dos opciones:
1) reducir el tamaño del userform (y también hacerlo más pequeño en la pantalla)
2) crear una hoja de Excel que tenga el diseño que deseas imprimir y, en el momento de imprimir, transferir los datos a esa hoja, y luego imprimir esa hoja.
-
-
Gracias por los OptionButton, voy a poner eso en marcha de inmediato.
Si has abierto mi archivo, verás que ya he preparado una hoja de Excel con las mismas indicaciones que en el USR. Creo que también voy a enviar mis datos a esta hoja y luego imprimirla dándole las dimensiones deseadas y ya que estoy, ¿por qué no imprimirla en blanco y negro (más rápido y más económico)?
Gracias-
No había notado la segunda pestaña, "impresión", ¡sino habría explicado de manera más sencilla!
Esto también te permite, si es útil, imprimir desde una línea del resumen, sin pasar por el userform.
Me pregunto cómo funciona todo esto, porque una parte de los datos se codifica antes de la reparación, y otra parte después, ¿no?
-
-
Sí, ese también es mi problema. No sé aún cómo lo haremos. Pensaba en guardar los albaranes para poder recuperarlos después de la reparación y así completar la parte "después de la reparación". Si no, usaríamos hojas impresas como la USF pero en blanco y, cuando regresaran, estarían codificadas. Pero creo que eso llevará más tiempo.
También puedo limitar la USF a la primera parte y codificar la segunda directamente en el resumen.
El resumen nos permitirá realizar estadísticas según todos los criterios que queramos.
Así que voy a ponerme a preparar la impresión copiando los datos de la USF en la hoja de Impresión.
Gracias y que tengas una excelente noche.-
quizás así:
- un userform para crear un nuevo albarán, con la creación de una nueva línea en "resumen" (todo esto ya existe)
- si nos posicionamos en la pestaña "resumen" sobre una de las líneas, y hacemos una combinación de teclas o un doble clic, esto inicia otro userform que permite corregir/completar los datos ya introducidos.
-
-
Excelente idea, voy a intentar eso. Pero también tenía la idea que utilicé en un programa de facturación (para el cual me ayudaste mucho) donde guardo los documentos por su número de orden y así puedo buscar el pdf, pero aquí lo guardaría en xlsx para poder corregirlo.
Voy a intentar las dos.
Gracias y excelente domingo. Aquí hace frío... ¡muy frío! -
¡En efecto!
Lo principal es que tengamos todo en el resumen.
A veces buscamos complicar las cosas cuando podemos hacerlo simple...
Y, por supuesto, aquí también se nota que hay más en dos cabezas que en una.
Gracias.