2012-08-16 45 views
8

Sommario: La mia azienda invia lettere ai clienti e mi chiede di scrivere una macro per compilare campi di testo diversi che sono stati impostati in un documento word poiché una quantità molto limitata di cose cambia tra le diverse lettere inviate. Ho eseguito macro in excel, ma questo è il mio primo incontro con i macro di ms-wordCompilazione di un modulo ms-word VBA/Navigazione intelligente più efficace tramite Word

Problema: Ho avuto difficoltà a trovare una navigazione efficace e intelligente tramite ms-word. Ho trovato questo articolo su moving in different directions che è proprio lo stesso dei tasti freccia. Speravo di avere un'idea del modo migliore per navigare nel documento word. Ad esempio, dovrei fare un ciclo di spostamento verso lo spazio 1 a destra finché non trovo qualcosa di significativo o c'è un modo più efficace?

Domanda: È possibile memorizzare una posizione modulo specifica in una variabile o la parola ms non ha un sistema di coordinate?

Grazie in anticipo!

+3

+ 1 Per una domanda ben spiegata. In Word puoi usare '.Find' o' For loops' o 'GoTo' per navigare nel tuo documento. Se hai campi modulo allora non hai bisogno di loop. Sono curioso di sapere perché vuoi memorizzare la posizione in una variabile? Puoi lavorare direttamente con i controlli del contenuto usando il loro nome. –

+0

@SiddharthRout Ho pensato che potrei probabilmente fare riferimento a componenti per nome, ma non ero sicuro della sintassi per questo. Tuttavia, la mia curiosità sull'archiviazione delle coordinate in una variabile non era necessariamente del tutto pertinente a questa domanda, anche se potrebbe essere utile –

+1

Ecco un esempio molto semplice: http: // StackOverflow.it/questions/10823874/with-a-word-contentcontrol-datepicker-how-do-i-get-the-value/10824117 # 10824117 –

risposta

5

Esistono almeno tre tipi di campo modulo nella recente versione di Windows di Word - Controlli del contenuto, "Campi modulo legacy" e Campi modulo ActiveX. Supponendo che si tratti di campi modulo legacy, si dovrebbe essere in grado di indicizzare la raccolta FormFields utilizzando il nome del segnalibro, quindi utilizzare, ad es.

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

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

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

semplice e ha fatto quello che volevo. –

2

Dovresti essere in grado di creare segnalibri in vari punti del documento in cui devi andare. Nella parola moderna, questo è nella scheda "Inserisci", nel gruppo "Collegamenti". Quindi è possibile accedere ai segnalibri da VBA e inserire il testo in loro con questo tipo di codice:

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

Questo MVP site ha più dati sulla tecnica. Inoltre, MSDN ha alcuni dati sugli oggetti segnalibro.

+0

Questo è stato davvero utile. Qualcun altro ha creato questo documento con i campi del modulo e ogni campo del modulo aveva un segnalibro elencato per esso sotto text1, text2, text3 ... ecc. Proverò a fare riferimento a questi segnalibri (o forse i controlli per nome come stava dicendo Siddharth). Ti farò sapere cosa mi viene in mente. Grazie dsolimano –

7

Per utilizzare i controlli del contenuto, è necessario assicurarsi di aver impostato il Title del controllo. Puoi anche impostare Tag se lo desideri. Vedere Snapshot

enter image description here

E quindi è possibile utilizzare questo codice per aggiornare il controllo del contenuto o recuperare il suo valore

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 

Quando si esegue il codice, questo è come appare

enter image description here

Per ottenere il testo del controllo è possibile utilizzare Debug.Print cc.Range.text

+0

Grazie per il tuo aiuto e il tuo impegno, buon esempio –

+0

In realtà ho usato questo codice ora perché ho ricevuto un documento di lettere diverso che utilizzava i controlli del contenuto invece dei campi del modulo. Grazie: p –

Problemi correlati