Controllo Excel da Word utilizzando VBA in Microsoft Excel 2010
A volte dobbiamo copiare i dati da un documento Word a un file Excel. Possiamo farlo molto facilmente con una macro in tutte le versioni di Office. La macro aprirà un file excel nuovo / esistente, ne copierà il contenuto, quindi salverà e chiuderà il file. Vediamo come si fa.
Option Explicit __ Sub OpenAndReadWordDoc ()
Dim tString As String Dim p As Long, r As Long Dim wrdApp As Object, wrdDoc As Object Dim wb As Workbook Dim trange As Variant _Set wb = Workbooks.Add With wb.Worksheets (1) .Range (“A1”)
wrdApp.Visible = True Set wrdDoc = wrdApp.Documents.Open (“B: \ Test \ MyNewWordDoc.docx”) _ _With wrdDoc Da p = 1 a .Paragraphs.Count Set trange = .Range (Start: =. Paragraphs (p ) .Range.Start, _ End: =. Paragraphs (p) .Range.End)
tString = trange.Text tString = Left (tString, Len (tString) -1) _ If Instr (1, tString, “1”)> 0 Allora wb.Worksheets (1) .Range (“A” & r) .Value = tString r = r + 1 End If Next p .Close End With wrdApp.Quit Set wrdDoc = Nothing Set wrdApp = Nothing wb.Saved = True End Sub Per copiare il codice sopra nel tuo file, premi Alt + F11 sulla tastiera On sul lato sinistro, vedrai 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 sulla destra Ora vediamo come funziona questo codice – Per prima cosa dichiariamo le variabili di cui abbiamo bisogno –tstring come a stringa per contenere il testo (vedremo quale testo più tardi). 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 che avrà i contenuti che devono essere trasferiti dalla parola doc al file excel.
Set wb = Workbooks.Add 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 – * Set wb – Workbooks.Open (“B: \ Test \ File1.xlsx”) _Con wb.Worksheets ( 1) .Range (“A1”)
Queste righe di codice inseriscono il testo “Contenuto del documento di Word:” con un carattere in grassetto e una dimensione del carattere 14 nella cella A1 del 1 ^ st ^ foglio di lavoro nella nuova cartella di lavoro. Quindi .Offset (1,0) .Select seleziona la riga successiva.
r = 3 Alla variabile “r” viene assegnato un valore 3 poiché questa è la riga iniziale nel file excel per i dati da copiare dal documento word.
Set wrdApp = CreateObject (“Word.Application”) _ Se Word è già in esecuzione nel sistema, _CreateObject * creerà 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 al momento della creazione. Per renderlo visibile, è necessario impostare wrdApp.Visible = True in modo che sia visibile.
_Set 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à il documento word. L’oggetto wrdDoc è stato assegnato a questo documento in modo da poterlo utilizzare in seguito nel codice.
With wrdDoc… .End With 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 l’istruzione End With. Una volta immessa l’istruzione End With, non è possibile fare riferimento agli oggetti dopo wrdDoc con il solo “.”.
For p = 1 to .Paragraphs.Count Questo è il ciclo “For” che andrà dal 1 ^ st ^ all’ultimo paragrafo nel documento word. Il file word che contiene i dati ha 100 righe di informazioni, ciascuna memorizzata come paragrafo separato. Il ciclo aumenterà da 1 a 100 e copierà i paragrafi. Se vengono impostate determinate condizioni, il copia incolla sarà basato su tali condizioni.
_Set trange = .Range (Start: =. Paragraphs (p) .Range.Start, End: =. Paragraphs (p) .Range.End) _ 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) _ Prima 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.
If Instr (1, tString, “1”)> 0 Then wb.Worksheets (1) .Range (“A” & r) .Value = tString r = r + 1 End If Questa funzione IF controlla se il testo in tString contiene il numero 1. Se è vero, copia il contenuto di tString nella successiva riga disponibile nella cartella di lavoro. “R” prima 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.
Next p .Close La riga di codice Next p passa al paragrafo successivo.
.Close 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 ovunque nel numero sono inclusi nell’output.
wrdApp.Quit Set wrdDoc = Nothing Set wrdApp = Nothing wb.Saved = True wrdApp.Quit chiuderà la parola Application. Set wrdDoc = Nothing e Set wrdApp = Nothing rilascerà la memoria occupata da queste 2 variabili oggetto e le imposterà su Nothing. wb.Saved = True salverà la cartella di lavoro.
Con il codice sopra possiamo controllare quali dati devono essere copiati dal file word al file excel.