Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

macro per cercare dati da una tabella word e inserirli in ex

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

macro per cercare dati da una tabella word e inserirli in ex

Postdi vale2882 » 19/10/16 15:22

Buon pomeriggio, ho bisogno del vostro aiuto.
Ho un documento word con diverse tabelle. Ho un foglio excel con due colonne dalle quali partire per cercare i dati nella tabella in word. La tabella in word da cercare a come titolo del paragrafo "Dati matrice diretta". Le tabelle presenti in word purtroppo hanno le stesse intestazioni ma titoli di paragrafi diversi.
Dopo aver trovato la tabella word di mio interesse, scorro le righe del foglio excel e vedo se i valori delle celle sono presenti nella tabella word. Se sono presenti nella tabella word devo copiare i corispondenti valori sulla stessa riga nelle colonne B,C e D del foglio excel.Potreste aiutarmi per favore?Grazie mille!!!
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Sponsor
 

Re: macro per cercare dati da una tabella word e inserirli i

Postdi alfrimpa » 19/10/16 16:06

Ciao Vale

Premetto che non ho mai scritto una macro in Word e quella che vedi sotto è solo il frutto di una ricerca in rete.

Codice: Seleziona tutto
Sub sCopiaTabellaSuExcel()
Dim oXL As Excel.Application
Dim wkb As Excel.Workbook
Dim wks As Excel.Worksheet
Dim tbl As Table
Dim ur As Long
Set oXL = New Excel.Application
oXL.Visible = True
Set wkb = oXL.Workbooks.Add
    Set wks = wkb.Worksheets.Add
For Each tbl In ActiveDocument.Tables
    tbl.Select
    Selection.Copy
    wks.Range("a1").Value = "Campo1"
    wks.Range("b1").Value = "Campo2"
    ur = wks.Cells(Rows.Count, 1).End(xlUp).Row
    wks.Range("A" & ur + 1).PasteSpecial xlPasteValues
Next
End Sub


In pratica non fa altro che copiare tutte le tabelle in un documento Word in un file di Excel.

Forse può essere uno spunto da cui partire e comunque allega i due file di esempio corredati dal risultato che vuoi ottenere nel file di Excel.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: macro per cercare dati da una tabella word e inserirli i

Postdi vale2882 » 20/10/16 14:23

Buonasera, posto due file,uno word e uno excel:
Codice articolo Descrizione Prezzo Disponibilità
Afr_tre7876 Tavolo 132 SI
Shgtr_6543 Sedia 23 SI
DFC_789 Divano 45 NO
Questa è la tabella in word.

In excel ho la seguente tabella:
Codice articolo Descrizione Prezzo Disponibilità
Afr_tre7876 Tavolo 132 SI
ghr_678 Lampada
Shgtr_6543 Sedia 23 SI
DFC_789 Divano 45 NO
Se nella tabella word non ho un codice che corrisponde a un codice presente in excel (caso Lampada), in excel la colonna 3 e 4 non vengono riempite. Come posso fare questo confronto? Grazie a tutti!
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per cercare dati da una tabella word e inserirli i

Postdi alfrimpa » 20/10/16 14:42

Scusa vale2882 ma è inutile continuare su due posti contemporaneamente.

Io ho copiato manualmente la tabella di Word in Excel e poi con un semplice CERCA.VERT (con un SE.ERRORE) ho ottenuto il risultato da te inserito sul file di Excel.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: macro per cercare dati da una tabella word e inserirli i

Postdi alfrimpa » 20/10/16 14:44

Come ti ho chiesto anche sull'altro forum devi allegare un file di Word che riproduca realisticamente la tua situazione.

Il file di Word contiene una o più tabelle?

Se è una sola (anche con un milione di righe) è banale arrivare al risultato che vuoi ottenere tu.

Ma poi non è possibile fare il tutto in Excel? sarebbe molto più semplice.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: macro per cercare dati da una tabella word e inserirli i

Postdi Anthony47 » 21/10/16 00:38

La descrizione di come identificare la tabella di tuo interesse e di cosa fare nel foglio Excel e' abbastanza vaga; ti consiglio, come ha gia' fatto Alfredo, di allegare un file word e un file excel di prova e su questi descrivere piu' dettagliatamente quali dati esaminare e che operazioni eseguire.

Per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17446
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cercare dati da una tabella word e inserirli i

Postdi patel » 21/10/16 10:11

e comegià detto da Alfredo decidere su quale forum continuare, decisione che spetta soltanto a vale
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: macro per cercare dati da una tabella word e inserirli i

Postdi Anthony47 » 21/10/16 19:02

Su questo forum il crosspoint non e' vietato; se vale2882 vuole chiedere qui e in altri posti noi non ci offendiamo (chiediamo solo che segua la discussione, valuti, provi e commenti quello che suggeriamo)
Ciao!
Avatar utente
Anthony47
Moderatore
 
Post: 17446
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cercare dati da una tabella word e inserirli i

Postdi vale2882 » 23/10/16 05:37

Buongiorno,scusatemi ma ho bisogno del vostro aiuto.ho avuto problemi col mio pc ci sto mandando il file Excel di esempio tramite cellulare usando Dropbox (Non mio).spero funzioni.il link è https://www.dropbox.com/s/ck140gtictzpp ... .xlsx?dl=0. ho copiato su un secondo foglio in excel la tabella word. A questo punto mi servirebbe fare un confronto tra le due tabelle in excel, presenti rispettivamente in Foglio1 e Foglio2. Creare un Foglio3 di riepilogo che mi dia il risultato descritto nel file excel che allego. Vorrei fare un confronto e colorare le differenze, magari mettendo nella colonna B la differenza (se c'è differenza di codice o di descrizione). Inoltre, nel foglio3, nel caso in cui ci sia match tra colonna A e B di entrambi i fogli, copiare il contenuto delle colonne C e D presenti solo nel foglio 2. Ho avuto anche un altro problema nel fare copia e incolla con una macro della tabella da word in Excel.si può fare una macro che copi la tabella word con celle unite in Excel e poi fare la macro che faccia il confronto,come spiegato Sopra?la mia tabella word ha 4 colonne e righe variabili,le celle unite le posso trovare solo in prima e seconda colonna.graxie per tutto l aiuto che mi darete!! !
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per cercare dati da una tabella word e inserirli i

Postdi patel » 23/10/16 08:15

allega anche il file word corrispondente con tutte le tabelle, io mi dedico all'importazione su excel
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: macro per cercare dati da una tabella word e inserirli i

Postdi vale2882 » 24/10/16 09:01

https://www.dropbox.com/s/qmpi3yovfg30u ... .docx?dl=0. Buongiorno, ecco il link dal quale potete scaricare il documento word di esempio. Grazie per l'aiuto
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per cercare dati da una tabella word e inserirli i

Postdi patel » 24/10/16 11:14

se ben ricordo avevi detto che il documento word che devi usare contiene molte tabelle e dovevi scegliere quella giusta, ora non è più così ? c'è solo quella ? l'allegato contiene una sola tabella.
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: macro per cercare dati da una tabella word e inserirli i

Postdi patel » 24/10/16 11:52

comunque il codice per copiare nel foglio2 l'unica tabella presente nel documento word è questo
Codice: Seleziona tutto
Sub CopyFromWord1()
ultima_riga = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row
If ultima_riga = 1 Then ultima_riga = 0
Set WordApp = CreateObject("Word.Application")
sFilename = "F:\Download\Codice.docx" ' <<< da modificare
WordApp.Visible = True
With WordApp.Documents.Open(sFilename)
    .Tables(1).Range.Copy
    Sheets(2).Cells(ultima_riga + 1, 1).PasteSpecial xlPasteValues
    Sheets(2).[A1].CurrentRegion.Columns.AutoFit
    .Application.Quit
End With
Set WordApp = Nothing
End Sub
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: macro per cercare dati da una tabella word e inserirli i

Postdi vale2882 » 24/10/16 14:17

Ciao patel, grazie per l'aiuto.Ho provato a meteere questa macro nel mio documento ma dovrebbe splittare le celle unite del word e copiare il contenuto delle celle unite.
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per cercare dati da una tabella word e inserirli i

Postdi patel » 24/10/16 16:13

non capisco cosa intendi, comunque una volta copiata la tabella su exce si può fare tutto quello che si vuole.
Ora tocca ad Alfredo.
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: macro per cercare dati da una tabella word e inserirli i

Postdi Anthony47 » 24/10/16 23:18

Per farla ancora piu' semplice, questa versione di macro importa le tabelle presenti su Word su Foglio2 compilando anche le righe delle celle unite.
Codice: Seleziona tutto
Sub worTables()
Dim OBJWord As Object, OBJDoc As Object
Dim myFIle As String, expSh As Worksheet, LastR As Long, I As Long, J As Long
Dim nwTAB0 As Range, olInd As Long
'
myFIle = "C:\PERCORSO\NomeFile.doc"          '<<< Il file Word da leggere
Set expSh = ThisWorkbook.Sheets("Foglio2")   '<<< Il foglio di questo file dove importare
'
'Set OBJWord = New Word.Application                 'EARLY BINDING
Set OBJWord = CreateObject("Word.Application")     'LATE BINDING
'
OBJWord.Visible = True
Set OBJDoc = OBJWord.Documents.Open(Filename:=myFIle)
For J = 1 To OBJDoc.Tables.Count                    'Scan delle Tables
    On Error Resume Next                            'Cerca riga libera
        LastR = expSh.Range("A1:O10000").Find(What:="*", After:=expSh.Range("A1"), _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious).Row
    On Error GoTo 0
    With OBJDoc.Tables(J)
        Set nwTAB0 = Cells(LastR + 2, 1)
        nwTAB0.Offset(1, 0).Value = "Wd_Table_#" & J
        For I = 1 To .Columns.Count
            olInd = 0
            For Each aCell In .Columns(I).Cells
                If aCell.RowIndex > (olInd + 1) And olInd > 0 Then      'Compila righe vuote
                    nwTAB0.Offset(olInd + 1, I).Resize(aCell.RowIndex - olInd - 1).Value = nwTAB0.Offset(olInd, I).Value
                End If
                nwTAB0.Offset(aCell.RowIndex, I).Value = Application.WorksheetFunction.Clean(.Cell(aCell.RowIndex, I).Range.Text)
                olInd = aCell.RowIndex
            Next aCell
            If .Rows.Count > (olInd) And olInd > 0 Then                 'Compila righe vuote
                nwTAB0.Offset(olInd + 1, I).Resize(.Rows.Count - olInd).Value = nwTAB0.Offset(olInd, I).Value
            End If
        Next I
    End With
Next J
'Completato:
OBJDoc.Close False
OBJWord.Quit
Set OBJWord = Nothing
End Sub
Le righe marcate <<< vanno compilate come da commento

A questo punto e' relativamente semplice confrontare le descrizioni rispetto al Codice (usare Cerca.Vert per estrarre la descrizione dalla seconda tabelle e confrontarla con la descrizione corrente); oppure codici presenti in una tabella ma non nell'altra (sempre Cerca.Vert; se risponde #N/D! vuol dire che il codice manca).

Per semplificare ulteriormente queste operazioni, a ogni tabella importata viene assegnato un "Nome" che e' quello segnato in colonna A accanto alla tabella, ed e' costituita da "Wd_Table_" + il numero di riga. Questo nome e' utilizzabile nelle formule al posto dell'intervallo della tabella; ad esempio posso scrivere
Codice: Seleziona tutto
=Cerca.Vert(CodiceProdotto;Wd_Table_3;2;0)
la formula restituira' la seconda colonna della tabella importata (se posizionata su Riga3)

Prova e vedi dove riesci ad arrivare; se ti areni ("se ti areni", non se non provi!) sai che siamo qui.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17446
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cercare dati da una tabella word e inserirli i

Postdi vale2882 » 25/10/16 11:53

Buongiorno, grazie Anthony! la macro funziona!L'unica cosa è che devo confrontare le tabelle estratte dal word con una tabella estratta da un altro documento e messa nel foglio . Nel foglio 2 ho estratto le tue tabelle. vorrei un foglio 3 di confronto in cui appunto avere il risultato del confronto come nel file excel allegato. Il cerca.vert non funziona con dati presi da tabelle di fogli diversi, giusto?
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per cercare dati da una tabella word e inserirli i

Postdi Anthony47 » 25/10/16 12:12

Il cerca.vert non funziona con dati presi da tabelle di fogli diversi, giusto?
Ahi ahi, avevo detto "Prova e vedi dove riesci ad arrivare; se ti areni ("se ti areni", non se non provi!) sai che siamo qui" ma se fai quella domanda e' perche' non hai provato...
Quanto alle tabelle importate con la mia macro esse sono "facilmente" richiamabili da altri fogli usando il "nome" che viene loro assegnato; ma puoi indirizzarle in modo esplicito (es Foglio2!A3:C5) o in modo facilitato (mentre componi la formula ti sposti tra i fogli e selezioni l'area di interesse).
Quindi insisti, vedrai che ne vieni fuori.
Comunque se ti areni ("se ti areni", non se non provi!) sai che siamo qui

Ciao!
Avatar utente
Anthony47
Moderatore
 
Post: 17446
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cercare dati da una tabella word e inserirli i

Postdi vale2882 » 25/10/16 16:04

Ciao Anthony!Ho implementato la funzione cerca.vert e funziona!!!L'unica cosa è che se metto il range della tabella a mano funziona, ma con il nome della tabella non funziona, mi restituisce #NOME?Ho estratto 9 tabelle e alla riga 681 ho Wd_Table_#9.Ho messo cerca.vert(A2;Foglio2!Wd_Table_9;3,0).Perchè non funziona col nome della tabella?Grazieee!!
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per cercare dati da una tabella word e inserirli i

Postdi Anthony47 » 25/10/16 17:38

Non so come ho fatto, ma ho allegato un codice macro intermedio :-? , non quello finale che e' questo:
Codice: Seleziona tutto
Sub worTables()
Dim OBJWord As Object, OBJDoc As Object
Dim myFIle As String, expSh As Worksheet, LastR As Long, I As Long, J As Long
Dim nwTAB0 As Range, olInd As Long
'
myFIle = "C:\PERCORSO\NomeFile.doc"          '<<< Il file Word da leggere
Set expSh = ThisWorkbook.Sheets("Foglio2")   '<<< Il foglio di questo file dove importare
'
'Set OBJWord = New Word.Application                 'EARLY BINDING
Set OBJWord = CreateObject("Word.Application")     'LATE BINDING
'
OBJWord.Visible = True
Set OBJDoc = OBJWord.Documents.Open(Filename:=myFIle)
For J = 1 To OBJDoc.Tables.Count                    'Scan delle Tables
    On Error Resume Next                            'Cerca riga libera
        LastR = expSh.Range("A1:H10000").Find(What:="*", After:=expSh.Range("A1"), _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious).Row
    On Error GoTo 0
    With OBJDoc.Tables(J)
        Set nwTAB0 = Cells(LastR + 2, 1)
        nwTAB0.Offset(1, 0).Value = "Wd_Table_" & nwTAB0.Offset(1, 0).Row
        For I = 1 To .Columns.Count
            olInd = 0
            For Each aCell In .Columns(I).Cells
                If aCell.RowIndex > (olInd + 1) And olInd > 0 Then      'Compila righe vuote
                    nwTAB0.Offset(olInd + 1, I).Resize(aCell.RowIndex - olInd - 1).Value = nwTAB0.Offset(olInd, I).Value
                End If
                nwTAB0.Offset(aCell.RowIndex, I).Value = Application.WorksheetFunction.Clean(.Cell(aCell.RowIndex, I).Range.Text)
                olInd = aCell.RowIndex
            Next aCell
            If .Rows.Count > (olInd) And olInd > 0 Then                 'Compila righe vuote
                nwTAB0.Offset(olInd + 1, I).Resize(.Rows.Count - olInd).Value = nwTAB0.Offset(olInd, I).Value
            End If
        Next I
        On Error Resume Next
            ActiveWorkbook.Names(nwTAB0.Offset(1, 0).Value).Delete
        On Error GoTo 0
        nwTAB0.Offset(1, 1).Resize(.Rows.Count, .Columns.Count).Name = nwTAB0.Offset(1, 0).Value
    End With
Next J
'Completato:
OBJDoc.Close False
OBJWord.Quit
Set OBJWord = Nothing
End Sub

Nel foglio in cui importi le tabelle word non usare le colonne A:H (che sono riservate alle tabelle); quindi eventuali formule mettile da colonna I in avanti.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17446
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "macro per cercare dati da una tabella word e inserirli in ex":


Chi c’è in linea

Visitano il forum: Nessuno e 38 ospiti