Macro de novato

Estimado experto.
Quisiera que me ayudases, quiero hacer una macro que contenga un formulario para pedir el nombre, el curso y el nivel, en el Excel 2000.
Pero quiero que el formulario aparezca al abrir la hoja 1, se rellenen los datos, se asignan a sus celdas correspondientes y cuando se abra otra vez la hoja 1 ya no vuelva a aparecer el formulario.
Lo de confeccionar el formulario lo sé, lo de asignar sus valores a las celdas más o menos, pero lo de aparecer automáticamente sin dar a la F5 y el código para que no vuelva a aparecer no tengo ni idea.
¡Ayúdame por favor!
Un saludo.

1 respuesta

Respuesta
1
Recién vuelto de mi fin de semana, vi tu pregunta.
Para resolver el problema de que automáticamente se muestre tu formulario, podemos asociar la macro que lanza el formulario al evento Activate, condicionado a que alguna de las celdas a cargar tenga dato o no. Cómo no sé, cuales son tales celdas, haré que la macro deje un 88 en una celda libre después de mostrar el formulario. Entonces, cuando se seleccione la hoja, la macro controlará si existe 88 en tal celda, mostrando el formulario sólo si ella no tuviera tal valor.
Por lo tanto, Carlos, para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y busca
La hoja donde quieres que esto ocurra (donde harás la carga de datos). Da doble click sobre ella. (Otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código).
Copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:
Private Sub Worksheet_Activate()
If Range("Z4") <> 88 Then
Range("Z4").Value = 88
UserForm1.Show
End If
End Sub
Puedes cambiar tal dirección (Z4), si así lo deseas.
Desde luego, tendrás que identificar un momento donde la celda Z4 vuelva a estar vacía y lista para ser activada la próxima vez.
Un evento posible sería cuando cierras el archivo. En tal caso busca la hoja que dice "ThisWorkbook" (o "EsteLibro" según la versión")
Copia y pega el código siguiente:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Hoja1"). Range("Z4"). ClearContents
ActiveWorkbook. Save
End Sub
Esta macro borra el contenido de Z4 y graba el archivo.
Desde luego, no sería necesaria esta macro, si este archivo no se sobreescribiera, habitualmente, después de ingresar los datos (puede que lo uses como plantilla y se grabe con otro nombre)
- Ingresa al sitio www.porloschicos.com y, si quieres,
presiona el botón de donación (es gratis).
Confío en que lo harás.
¡Hola admirado Fernando!
Le acabo de mandar una pregunta pero como sospecho que ha podido haber un error en el envío se la vuelvo a hacer y disculpe si le ha llegado.
Le decía que estoy muy contento por haber atendido mi problema y encontrado la solución(que para mí era bien difícil)pero que al probarla he encontrado este inconveniente:
El formulario quiero que aparezca en la hoja1. Como al abrir el libro es la hoja activa, no aparece el formulario, tengo que cambiar de hoja y luego volver para que se rellene la celda con el 88 y aparezca esta vez si, el formulario.
Le ruego estudie el tema a ver si puede haber una solución.
Y abusando un poco más decirle que me interesaría que los datos los colocase en la hoja2, yo he copiado de un manual este código y se lo he asignado al Tex Box:
Private Sub TextBox1_Change()
Range("A9").Select
ActiveCell.FormulaR1C1 = TextBox1
End Sub
Pero, no se cambiarlo para que la A9 sea de la hoja 2.
En fin agradecido por todo un fuerte abrazo.
Carlos.
Bien, diría que la solución más trivial si mantuviste la macro que graba el archivo antes de cerrarlo es agrega una linea para que cambie a otra hoja, antes de grabar.
Así, tal código, sería:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Hoja1").Range("Z4").ClearContents
Sheets("Hoja2").Select
ActiveWorkbook.Save
End Sub
Eso, obligaría a que al ingrear al archivo debas activar la Hoja1 pues estrías en la Hoja2.
Como alterntiva, si no quieres aquella solución agrega esta otra macro (en ThisWorkBook) para que ejecute dispare el formulario apenas abre el archivo:
Private Sub Workbook_Open()
Hoja1.Select
If Range("Z4") <> 88 Then
Range("Z4").Value = 88
UserForm1.Show
End If
End Sub
Preferiría la primera opción, personalmente, pero tienes la posibilidad de elegir la que más te agrade.
Respecto a tu segunda pregunta, esté código dejará el contenido del textbox en la hoja2:
Private Sub TextBox1_Change()
Sheets("Hoja2).Range("A9").value = TextBox1.value
End Sub
Como ves, basta una sola instrucción para hacer lo que solicitabas
Pruébalo y dime si resuelve tu problema.
Un abrazo!
Fernando
Lo he probado y funciona de maravilla.
Muchísimas gracias de todo corazón.Me ha ahorrado meses de estudio y muchas horas de dar vueltas por internet, topar con personas como usted es todo un placer.
Un fuerte abrazo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas