2012-08-16 80 views
8

Resumen: Mi empresa envía cartas a los clientes y quiere que escriba una macro para rellenar campos de formulario de texto diferentes que se han configurado en un documento de palabra ya que una cantidad muy limitada de cosas cambia entre las diferentes letras enviadas. He hecho macros en Excel, pero este es mi primer encuentro con macros de ms-wordRellenar un formulario ms-word VBA/Navegación inteligente más eficaz a través de Word

Problema: Me ha costado encontrar una navegación efectiva e inteligente a través de ms-word. Encontré este artículo sobre moving in different directions que es realmente lo mismo que las teclas de flecha. Esperaba obtener una idea de la mejor manera de navegar por el documento Word. Por ejemplo, ¿debo hacer un bucle de moverme al espacio 1 correcto hasta que encuentre algo significativo o haya una manera más efectiva?

Pregunta: ¿Es posible almacenar una ubicación de formulario específica en una variable o la palabra ms no tiene un sistema de coordenadas?

¡Gracias de antemano!

+3

+ 1 Para una pregunta bien explicada. En word puede usar '.Find' o' For loops' o 'GoTo' para navegar alrededor de su documento. Si tiene campos de formulario, entonces no necesita bucles en absoluto. Tengo curiosidad sobre por qué quieres almacenar la ubicación en una variable? Puede trabajar directamente con los controles de contenido usando su nombre. –

+0

@SiddharthRout Pensé que probablemente podría referirme a los componentes por su nombre, pero no estaba seguro de la sintaxis para esto. Sin embargo, mi curiosidad sobre el almacenamiento de coordenadas en una variable no era necesariamente completamente relevante para esta pregunta, aunque podría ser útil. –

+1

Aquí hay un ejemplo muy básico: http: // stackoverflow.com/questions/10823874/with-a-word-contentcontrol-datepicker-how-do-i-get-the-value/10824117 # 10824117 –

Respuesta

5

Existen al menos tres tipos de campos de formulario en la versión reciente de Windows de Word - Controles de contenido, "Campos de formulario heredados" y Campos de formulario ActiveX. Suponiendo que se trata de campos de formulario heredados, debería poder indexar la colección de FormFields utilizando el nombre del marcador, y luego usar, por ej.

ActiveDocument.FormFields("Text1").Result = "mytextformfieldresult" 

ActiveDocument.FormFields("DropDown1").Result = "mydropdownformfieldresult" 

ActiveDocument.FormFields("Check1").Checkbox.Value = True 
+0

simple e hice lo que quería. –

2

Debería poder crear marcadores en varios lugares del documento al que debe ir. En Word moderno, esto está en la pestaña "Insertar", en el grupo "Enlaces". A continuación, puede acceder a los marcadores desde VBA e insertar texto en ellos con este tipo de código:

ActiveDocument.Bookmarks("myBookmark").Range.InsertBefore "Inserted Text" 

Este MVP site tiene más datos sobre la técnica. Además, MSDN tiene algunos datos sobre los objetos de marcador.

+0

Esto fue realmente útil. Alguien más hizo este documento con los campos de formulario y cada campo de formulario tenía marcado para él en texto1, texto2, texto3 ... etc. Voy a tratar de referirme a estos marcadores (o posiblemente a los controles por nombre como Siddharth decía) Te dejaré saber lo que se me ocurrió. Gracias dsolimano –

7

Para trabajar con los controles de contenido, debe asegurarse de haber configurado Title del control. También puede establecer el Tag si lo desea. Ver instantánea

enter image description here

Y a continuación, puede utilizar este código para actualizar el control de contenido o recuperar su valor

Sub Sample() 
    Dim cc As ContentControl 

    For Each cc In ActiveDocument.ContentControls 
     If cc.Title = "MyTextBox1" Then 
      cc.Range.Text = "Hello World!" 
      Exit For 
     End If 
    Next cc 
End Sub 

Cuando se ejecuta el código, esto es cómo se ve

enter image description here

Para obtener el texto del control puede usar Debug.Print cc.Range.text

+0

Gracias por su ayuda y esfuerzo, buen ejemplo –

+0

De hecho, utilicé este código porque obtuve un documento de carta diferente que utilizaba controles de contenido en lugar de campos de formulario. Gracias: p –

Cuestiones relacionadas