COMBINAR
MACROS CON CAMPOS DE FORMULARIO EN WORD
Hace poco tuve un
problema práctico, necesitaba crear alrededor de 50 plantillas
de Word y la sola idea de programar línea a línea usando Select.Typetext
Text:= me daba dolor de estómago. ¿No sería mejor escribir las
plantillas en Word e insertar los campos de formulario, que luego
se conectaran con la una macro de entrada de datos?. Eso me
ahorraría mucho trabajo y permitiría hacer una macro estándar
que sirviese para varias plantillas con solo modificaciones
menores.
Pero no encontraba
la forma de hacerlo, finalmente se me ocurrió repasar el curso
de un tal Tomás Bradanovic y ahi encontre la solución, ¿como
lo hice? siguiendo mis propios consejos grabé un macro y luego
estudié el código generado. Le saqué las líneas superfluas y
listo.
Entrando en materia
el procedimiento es el siguiente:
- Abrir una plantilla con el
documento que queremos crear, usando Ver, Barras de
Herramientas, colocamos las barras Visual Basic y
Formularios, luego escribí normalmente el documento y
usando el botón para insertar campo de formulario, fui
colocando los campos variables, aquí está el ejemplo.
Noten las barras de Visual Basic y de formularios en la
última fila, con el primer botón (ab) de la barra de
formularios se insertan los campos:

- Una vez
escrito e insertados los campos le ponemos nombres,
seleccionando cada campo, click con botón derecho,
Propiedades, Nombre. Así los campos quedan con nombres
descriptivos como: tribunal, ciudad, fecha, medico,
proceso, fallecido, etc.
- Luego hacemos
click sobre la barra de Visual Basic para entrar al
editor, y creamos la ventana estándar de ingreso de
datos así:

- Luego
programamos la form con el evento initialize con
Private Sub UserForm_Initialize()
UserForm1.Caption = "Autopsia"
Label1.Caption = "MEDICO" 'combo1
Label2.Caption = "JUEZ" 'combo2
Label3.Caption = "SECRETARIO" 'combo3
Label4.Caption = "MOVIMIENTO" 'combo4
Label5.Caption = "FECHA" 'textbox1
Label6.Caption = "FALLECIDO" 'textbox2
Label7.Caption = "ROL" 'textbox3
Label8.Caption = "" 'textbox4
Label9.Caption = "" 'textbox5
Label10.Caption = "" '´textbox6
TextBox4.Visible = False
TextBox5.Visible = False
TextBox6.Visible = False
TextBox1.Text = Date
ComboBox4.Text = "SUM SOLICITA INF AUTOPSIA"
ComboBox1.AddItem "CARLOS VILLAVICENCIO SILVA"
ComboBox1.AddItem "ADRIANA BARRIENTOS ESPINOZA"
ComboBox2.AddItem "JORGE QUIÑONES GARAT"
ComboBox2.AddItem "HECTOR GUTIERREZ MASSARDO"
ComboBox3.AddItem "HECTOR GUTIERREZ MASSARDO"
ComboBox3.AddItem "JULIO MAZUELOS RAMOS"
ComboBox1.Text = ComboBox1.List(0)
ComboBox2.Text = ComboBox2.List(0)
ComboBox3.Text = ComboBox3.List(0)
End Sub
- Y lo
importante, en el botón de comando escribimos:
Private Sub
CommandButton1_Click()
Selection.GoTo What:=wdGoToBookmark, Name:="tribunal"
Selection.TypeText Text:="PRIMER"
Selection.GoTo What:=wdGoToBookmark, Name:="ciudad"
Selection.TypeText Text:="ARICA"
Selection.GoTo What:=wdGoToBookmark, Name:="fecha"
Selection.TypeText Text:=TextBox1.Text
Selection.GoTo What:=wdGoToBookmark, Name:="medico"
Selection.TypeText Text:=ComboBox1.Text
Selection.GoTo What:=wdGoToBookmark, Name:="rol"
Selection.TypeText Text:=TextBox3.Text
Selection.GoTo What:=wdGoToBookmark, Name:="fallecido"
Selection.TypeText Text:=TextBox2.Text
Selection.GoTo What:=wdGoToBookmark, Name:="juez"
Selection.TypeText Text:=ComboBox2.Text
Selection.GoTo What:=wdGoToBookmark, Name:="secretario"
Selection.TypeText Text:=ComboBox3.Text
Selection.GoTo What:=wdGoToBookmark, Name:="medico2"
Selection.TypeText Text:=ComboBox1.Text
Unload UserForm1
End Sub
Como pueden ver, todo se reduce a una instrucción Selection.GoTo What:=wdGoToBookmark,
Name:="nombre
de variable" y luego escribimos en el
campo con Selection.TypeText
Text:=TextBox2.Text
Algunas
precauciones al programar plantillas
Si están
programando una plantilla (.dot) en lugar de un documento
corriente hay que tener en cuenta que para modificarla
debemos usar botón derecho y Abrir, si hacemos doble click
no aparecerá la plantilla sino un Doc1.doc.
También hay
que tener cuidado de no probar el programa cuando esté
abierto como plantilla porque deesaparecerán los campos (serán
reemplazados) y perderás el trabajo. Hay que cerrarla y
luego abrirla con doble click para que aparezca como Doc1.doc.
Los detalles y
adornos no los coloco para no enredarlos, solo les muestro a
modo de idea, que se puede colocar alguna propaganda en el
programa, en este caso al hacer click sobre "Tomás
Bradanovic Computación" aparece la ventana de
propaganda:

Un último dato,
si abren la caja de herramientas y luego van a Herramientas,
Controles Adicionales del menú, pueden agregar el control
Microsoft MonthView 6.0 con lo que pueden dotar de un
calendario a sus aplicaciones VBA para los programas que
requieran cálculos con fecha, agendas, etc, miren que bonito
es

Esto último lo
descubrió Tomás Jr. (9 años) que está aprendiendo también a
usar el VBA.
Ya lo ven,
programar en VBA es más fácil que comer pan, espero que estos
datos les hayan servido
tombrad@webhost.cl
http://fly.to/arica