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.