Controlla Excel da Word usando VBA in Microsoft Excel 2010

Anonim

Ci sono volte in cui dobbiamo copiare i dati da un documento di Word a un file Excel. Possiamo farlo molto facilmente con una macro in tutte le versioni di Office. La macro aprirà un file excel esistente/nuovo, copierà il contenuto e quindi salverà e chiuderà il file. Vediamo come si fa.

Opzione esplicita


Sub OpenAndReadWordDoc()
Dim tString As String
Dim p As Long, r As Long
Dim wrdApp As Object, wrdDoc As Object
Dim wb come cartella di lavoro
Dim trange come variante

Imposta wb = Cartelle di lavoro.Aggiungi
Con wb.Fogli di lavoro(1).Intervallo(“A1”)
.Value = "Contenuto documento Word:"
.Font.Bold = True
.Dimensione carattere = 14
.Offset(1,0).Seleziona
Termina con

r = 3

Imposta wrdApp = CreateObject ("Word.Application")
wrdApp.Visible = True
Imposta wrdDoc = wrdApp.Documents.Open(“B:\Test\MyNewWordDoc.docx”)

Con wrdDoc
Per p = 1 fino a .Paragraphs.Count
Imposta trange = .Intervallo(Inizio:=.Paragrafi(p).Intervallo.Inizio, _
Fine:=.Paragrafi(p).Intervallo.Fine)
tString = trange.Text
tString = Left(tString, Len(tString)-1)

Se Instr(1, tString,”1”) > 0 Allora
wb.Worksheets(1).Range(“A” & r).Value = tString
r=r+1
Finisci se

Avanti p
.Chiudere

Termina con

wrdApp.Quit
Imposta wrdDoc = Niente
Imposta wrdApp = Niente
wb.Saved = True

Fine sottotitolo

Per copiare il codice sopra nel tuo file,

  • Premi Alt + F11 sulla tastiera
  • Sul lato sinistro, vedrai gli oggetti di Microsoft Excel
  • Fare clic con il tasto destro e selezionare Inserisci
  • Quindi fare clic su Modulo
  • Copia il codice nella finestra del codice a destra

Ora vediamo come funziona questo codice -

Per prima cosa dichiariamo le variabili di cui abbiamo bisogno -tstring come stringa per contenere il testo (vedremo quale testo in seguito). 2 variabili “p” e “r” come contatori. Questi sono del tipo "lungo". Quindi abbiamo le 2 variabili oggetto wrdApp e wrdDoc. wrdApp è l'oggetto applicazione Word e wrdDoc è l'oggetto documento Word. Wb è la nostra variabile della cartella di lavoro per la nuova cartella di lavoro creata nel codice. Se stai aprendo una cartella di lavoro esistente, puoi invece assegnare questa variabile a quella. L'ultima variabile è il tipo di variabile trange variant che avrà i contenuti che devono essere trasferiti dalla word doc al file excel.

Imposta wb = Cartelle di lavoro.Aggiungi

Questo assegna la nuova cartella di lavoro alla variabile wb. Se non si desidera aggiungere una nuova cartella di lavoro ma aprire una cartella di lavoro esistente, è possibile modificare questa riga come segue:
Imposta wb - Cartelle di lavoro.Apri ("B:\Test\File1.xlsx")

Con wb.Fogli di lavoro(1).Intervallo(“A1”)
.Value = "Contenuto documento Word:"
.Font.Bold = True
.Dimensione carattere = 14
.Offset(1,0).Seleziona
Termina con

Il With wb.Worksheets(1).range("A1") è un modo rapido per fare riferimento ad esso. Quindi non è necessario ripeterlo per ciascuna delle righe di codice tra le istruzioni With e End with.

Queste righe di codice inseriscono il testo "Contenuto del documento di Word:" con un carattere in grassetto e dimensione del carattere 14 nella cella A1 del 1ns foglio di lavoro nella nuova cartella di lavoro. E poi .Offset(1,0).Select seleziona la riga successiva.

r = 3

Alla variabile “r” viene assegnato un valore 3 in quanto questa è la riga iniziale nel file excel per i dati da copiare dal documento word.

Imposta wrdApp = CreateObject ("Word.Application")

Se Word è già in esecuzione nel tuo sistema,CreaOggettocreerà una nuova istanza di Word. Quindi questa riga assegna la variabile oggetto wrdApp all'applicazione Word che puoi utilizzare in seguito nel codice.

wrdApp.Visible = True

L'istanza di Word appena creata non sarà visibile durante la sua creazione. Per renderlo visibile, devi impostare wrdApp.Visible = True in modo che sia visibile.

Imposta wrdDoc = wrdApp.Documents.Open("B:\Test\MyNewWordDoc.docx")

Abbiamo creato la nuova istanza dell'applicazione word ma non abbiamo ancora aperto un documento word sorgente. Quindi questo comando aprirà la parola documento. L'oggetto wrdDoc è stato assegnato a questo documento in modo da poterlo utilizzare successivamente nel codice.

Con wrdDoc… .Termina con

Questo è il nostro ciclo "With" che funzionerà interamente con l'oggetto wrdDoc. Una volta aperto questo ciclo, non è necessario ripetere nuovamente il testo "wrdDoc" in questo ciclo. Puoi iniziare direttamente con il punto (".") prima di qualsiasi oggetto relativo a wrdDoc. Questo ciclo termina con il Termina con dichiarazione. Una volta che l'istruzione End With è stata immessa, non è possibile fare riferimento agli oggetti dopo wrdDoc solo con il ".".

Per p = 1 fino a .Paragraphs.Count

Questo è il ciclo "For" che andrà in loop da 1ns agli ultimi paragrafi del documento word. Il file di parole che contiene i dati ha 100 righe di informazioni, ciascuna memorizzata come un paragrafo separato. Il ciclo incrementerà da 1 a 100 e copierà i paragrafi. Se vengono impostate determinate condizioni, il copia incolla sarà basato su tali condizioni.

Imposta trange = .Intervallo(Inizio:=.Paragrafi(p).Intervallo.Inizio, Fine:=.Paragrafi(p).Intervallo.Fine)

Questo assegna l'inizio e la fine di ogni paragrafo all'intervallo man mano che il ciclo aumenta.

tString = trange.text
tString = Left(tString,len(tString)-1)

Per prima cosa il testo da trange viene passato a TString. Quindi ogni paragrafo ha un carattere di paragrafo alla fine della frase. Questo viene rimosso utilizzando la funzione Sinistra. Dal lato sinistro, tutti i caratteri tranne l'ultimo sono memorizzati nella variabile tString.

Se Instr(1, tString, “1”) > 0 Allora
wb.Worksheets(1).Range(“A” & r).Value = tString
r=r+1
Finisci se

Questa funzione IF controlla se il testo in tString contiene il numero 1. Se è vero, copia il contenuto di tString nella riga successiva disponibile nella cartella di lavoro. "r" inizialmente aveva un valore di 3. Usando r=r+1, lo incrementiamo di 1, in modo che la voce successiva possa essere posizionata sotto la voce precedente.

Avanti p
.Chiudere

Il Avanti p la riga di codice viene incrementata al paragrafo successivo.

.Chiudere chiude il documento una volta che tutti i paragrafi sono stati elaborati. Questo è l'output che otteniamo nel file excel -

Vedrai che solo quei paragrafi che contengono il numero 1 in qualsiasi punto del numero sono inclusi nell'output.

wrdApp.Quit
Imposta wrdDoc = Niente
Imposta wrdApp = Niente
wb.Saved = True

wrdApp.Quit chiuderà la parola Applicazione. Set wrdDoc = Nothing e Set wrdApp = Nothing rilasceranno la memoria occupata da queste 2 variabili oggetto e le imposteranno su Nothing. wb.Saved = True salverà la cartella di lavoro.

Con il codice sopra possiamo controllare quali dati copiare dal file word al file excel.