Sviluppare funzionalita su Microsoft Office con VBA Macro per Importare in foglio excel le righe di un .doc o .docx nelle celle A:A

Login Registrati
Stai vedendo 25 articoli - dal 1 a 25 (di 34 totali)
  • Autore
    Articoli
  • #13040 Score: 0 | Risposta

    GIORGIO

      Buongiorno a tutti, vorrei capire se è possibile fare quello che ho scritto in oggetto.

      Perché in tutti gli esempi che sono riuscito a trovare quando cerco di inserire le righe, nel caso del file .doc salta subito ad EOF e non carica nulla nelle celle

      #13041 Score: 0 | Risposta

      patel
      Moderatore
        50 pts

        allega due piccoli file di esempio, excel con i dati e word col risultato desiderato

        #13042 Score: 0 | Risposta

        Giox06
        Partecipante

          Ciao, grazie.

          Ho effettuato l'iscrizione perché altrimenti non trovavo dove allegare i file

          Allegati:
          You must be logged in to view attached files.
          #13045 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            238 pts

            Senza ancora aver visto il codice in Excel noto però che nel file di Word non ci sono ritorni a capo a separare le righe, tranne "Quartariga" ed "Ennesima riga" (ed "EOF").

            In pratica, è condizione essenziale che tu inserisca un ritorno a capo (battendo Invio) nel file di Word altrimenti il codice non è in grado di capire quanto incontra il carattere di fine riga.

            E poi hai due strade: 

            - codice in Word che esporta verso Excel, oppure

            - codice in Excel che importa da Word

            Questa seconda è la strada che vuoi percorrere? e come sei messo a VBA?

            #13046 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              238 pts

              Comunque per darti una dritta, senza passare da "Input" sul file di Word che non è un semplice file di testo ma contiene caratteri di controllo non suoi (ecco perchè in foglio "Attuale" hai tutto quel po' po' di codici illeggibili): in Word ogni Document espone una proprietà Paragraphs che già di suo sa quando si va a capo. Basta ciclare nella collezione dei Paragraphs e importare ogni elemento in una cella di Excel. Si fa prima a farlo che a dirlo 🙂

              #13052 Score: 0 | Risposta

              Giox06
              Partecipante

                Non riesco più ad uplodare risposte....

                #13053 Score: 0 | Risposta

                Giox06
                Partecipante

                  Riprovo....

                   

                  questo è il codice realizzato attraverso un registra macro ma come dici tu (vecchio frac) mi da "quel po' po' di codici illeggibili"

                   

                  Sub IN_put()
                  ' IN_put Macro
                      Range("A1").Select
                      ActiveWorkbook.RefreshAll
                      ActiveWorkbook.RefreshAll
                      Application.CutCopyMode = False
                      With ActiveSheet.QueryTables.Add(Connection:= _
                          "TEXT;/Users/xxxxx/Desktop/ProvaTextIN.docx", Destination:= _
                          Range("$A$1"))
                          .Name = "ProvaTextIN"
                          .FieldNames = True
                          .RowNumbers = False
                          .FillAdjacentFormulas = False
                          .PreserveFormatting = True
                          .RefreshOnFileOpen = False
                          .RefreshStyle = xlInsertDeleteCells
                          .SavePassword = False
                          .SaveData = True
                          .RefreshPeriod = False
                          .TextFilePromptOnRefresh = False
                          .TextFilePlatform = 10000
                          .TextFileStartRow = 1
                          .TextFileParseType = xlDelimited
                          .TextFileTextQualifier = xlTextQualifierDoubleQuote
                          .TextFileConsecutiveDelimiter = False
                          .TextFileTabDelimiter = False
                          .TextFileSemicolonDelimiter = False
                          .TextFileCommaDelimiter = False
                          .TextFileSpaceDelimiter = False
                          .TextFileColumnDataTypes = Array(1)
                          .TextFileTrailingMinusNumbers = True
                          .Refresh BackgroundQuery:=False
                      End With
                  End Sub
                  #13054 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    238 pts

                    No no, butta via tutto 🙂

                    Devi creare un oggetto di tipo Word Application, aprire il documento Word e quindi ciclare nell'insieme Paragraphs come ti ho detto, per sistemare ogni elemento in una cella di Excel. Non vorrei sbanfare ma sono meno di venti righe comprese le dichiarazioni di variabili e la firma della routine 🙂

                    #13055 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      238 pts

                      Ti do l'imbeccata 😀

                      Sub import_word_paragraphs()
                      Dim lr As Long
                      Dim wdApp As Object
                      Dim wdDoc As Object
                      Dim para As Object
                          
                          Set wdApp = CreateObject("Word.Application")
                          Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "\ProvaTextIN.docx")
                          
                          ...
                          
                      End Sub
                      
                      #13056 Score: 0 | Risposta

                      Giox06
                      Partecipante

                        "Questa seconda è la strada che vuoi percorrere? "

                        SI!

                        "e come sei messo a VBA?"

                        Male, Sto iniziando adesso, (avendo trovato il vs corso https://www.excelvba.it/corso/) appunto perché ho capito che questo import da file WORD non si può fare attraverso l'import dati di EXCEL

                        #13057 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          238 pts

                          Giox06 ha scritto:

                          non si può fare attraverso l'import dati di EXCEL

                          Non si può fare perchè il formato di salvataggio dei dati di un documento Word è proprietario, cioè chiuso, non aperto come ad esempio il formato di testo standard. Per questo occorre aprire una sessione di Word in memoria, aprire il file docx, quindi utilizzarne i metodi e le proprietà come se si fosse dentro Word (e invece sei dentro Excel). ma non è complicato.

                          Se sei proprio così a terra con la logica della programmazione ti conviene irrobustirti un poco, altrimenti ci parliamo di cose che non sai se ti servono oppure no.

                          #13058 Score: 0 | Risposta

                          Giox06
                          Partecipante

                            Se sei proprio così a terra con la logica della programmazione ti conviene irrobustirti un poco, altrimenti ci parliamo di cose che non sai se ti servono oppure no.

                            Ok, mi faccio una sessione di studio poi in caso ritorno

                            #13059 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              238 pts

                              Se proprio ti serve il lavoro finito te lo posso anche passare, ma è frustrante utilizzare qualcosa che non si conosce o non s capisce. 

                              Questo è il codice che ti serve, copia e incolla nel modulo1 del tuo file:

                              Sub import_word_paragraphs()
                              Dim lr As Long
                              Dim wdApp As Object
                              Dim wdDoc As Object
                              Dim para As Object
                              
                                  Sheets("result").Activate
                                  lr = 1
                                  
                                  Set wdApp = CreateObject("Word.Application")
                                  Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "\ProvaTextIN.docx")
                                  
                                  For Each para In wdDoc.Paragraphs
                                      Cells(lr, "A") = para.Range.Text
                                      lr = lr + 1
                                  Next
                                  
                                  Columns(1).AutoFit
                                  
                                  wdDoc.Close
                                  wdApp.Quit
                                  
                                  Set wdDoc = Nothing
                                  Set wdApp = Nothing
                                  
                              End Sub
                              

                              Nota: perchè funzioni devi creare il foglio "result" nel file.

                              Poi, è chiaro, ti consiglio di studiartene le varie parti e di chiedere, per qualsiasi dubbio o chiarimento siamo qua. Vorrei però che ne capissi bene il funzionamento per essere poi autonomo nell'eventuale modifica o integrazione.

                              #13070 Score: 0 | Risposta

                              Giox06
                              Partecipante

                                Poi, è chiaro, ti consiglio di studiartene le varie parti e di chiedere, per qualsiasi dubbio o chiarimento siamo qua. Vorrei però che ne capissi bene il funzionamento per essere poi autonomo nell'eventuale modifica o integrazione.

                                Buongiorno e grazie, grazie molte dell'imbeccata e del lavoro. (che sto già esaminando).

                                Infatti, credo che per ora non posso utilizzarlo e quindi testarlo, perché ho office 365 sul mac

                                e da quello che ho letto non posso ne utilizzare la funzione per creare userform, ne tantomeno la Word.Application o mi sbaglio?

                                Da quello che ho appreso, la soluzione per la creare userform sarebbe utilizzare la versione 2011, ma per quanto riguarda l'oggetto word.application non ho trovato soluzioni o mi sbaglio ?

                                #13071 Score: 0 | Risposta

                                vecchio frac
                                Senior Moderator
                                  238 pts

                                  Non conosco affatto il mondo Mac, e mi dispiace non posso risolvere i tuoi dubbi. Ma tu non stai usando Userform, nel codice visto. So che ci sono problemi con gli oggetti ActiveX ma non credo che istanziare un oggetto esistente (cioè installato) sia vietato. Però non posso fare prove sul campo.

                                  #13072 Score: 0 | Risposta

                                  patel
                                  Moderatore
                                    50 pts

                                    Non c'è alcuna userform da creare, però ho qualche dubbio che possa funzionare su Mac, cosa che avresti dovuto dire subito all'inizio e magari nel titolo

                                    #13074 Score: 0 | Risposta

                                    Giox06
                                    Partecipante

                                      Mi sbaglio.

                                      L'ho provato adesso.

                                      Funziona, funziona bene.

                                      Solo che come dicevi tu

                                      noto però che nel file di Word non ci sono ritorni a capo a separare le righe, 

                                      a me interessa intercettare i ritorni a capo "/n" automatici e valutarli come righe, ho provato a caricare un documento "originale" e mi da errore di runtime Errore di automazione.

                                       

                                      #13075 Score: 0 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        238 pts

                                        Infatti nel mio test ho dovuto inserire i ritorni a capo alla fine delle presunte righe (quando finisce una "prima riga" e comincia una "seconda riga") affinchè il codice funzionasse (altrimenti tutto il paragrafo, unitariamente, finisce in cella).

                                        Se con la frase "a me interessa intercettare i ritorni a capo "/n" automatici " intendi quelli che separano un paragrafo da un'altro, ok; se intendi i ritorni a capo logici o visivi, non è ok perchè è impossibile sapere quando finisce una riga (dipende dal tipo e dalla grandezza del font utilizzato e magari anche dalla percentuale di zoom).

                                        Puoi allegare un documento "originale" se non ci sono dati troppo riservati? Su quale riga esce l'errore di automazione?

                                        p.s. quoto patel quando dice che le informazioni sul sistema operativo e sulla versione utilizzata, è meglio darle subito.

                                        #13076 Score: 0 | Risposta

                                        Giox06
                                        Partecipante

                                          VERO  

                                          !p.s. quoto patel quando dice che le informazioni sul sistema operativo e sulla versione utilizzata, è meglio darle subito.

                                          Me ne scuso.

                                           

                                          Puoi allegare un documento "originale" se non ci sono dati troppo riservati?

                                          Di riservato non c'è gran che.

                                          Posso inviare privatamente, perché non sono il proprietario.

                                           

                                          Se con la frase "a me interessa intercettare i ritorni a capo "/n" automatici " 

                                          Intendo i rientri di riga che nella conversione da word a txt lo chiede, e corrisponde a  " InsertLineBreaks:=True ".

                                           

                                          " Non c'è alcuna userform da creare "

                                          Vero, infatti la volevo/vorrei realizzare.

                                          A questo punto  solo se è fattibile e poi realizzabile la macro che vecchio frac ha sviluppato.

                                          Insomma, muovendomi quasi discretamente con excel, vorrei iniziare a capire qualcosa anche di Vba.

                                           

                                          Su quale riga esce l'errore di automazione?

                                          L'errore non esce! Dipendeva dal tipo di .docx che all'interno aveva le sottolineature, annotazioni, correzioni etc. (credo), le ho eliminate prendendo un'altro file integro.

                                          #13077 Score: 0 | Risposta

                                          Giox06
                                          Partecipante

                                            ok, in privato non è possibile allegare file. lo faccio qui

                                            Allegati:
                                            You must be logged in to view attached files.
                                            #13084 Score: 0 | Risposta

                                            vecchio frac
                                            Senior Moderator
                                              238 pts

                                              No, nell'area messaggi non si possono allegare file però hai a disposizione la mail redazione@excelvba.it oppure la mia mail privata che ormai conoscono tutti 🙂

                                              Il file allegato mi sembra normalissimo, il mio Word lo gestisce bene con il codice postato sopra, ti farei fare questa prova, se Mac permette l'esecuzione di codice VBA in Word: apri il documento in Word, crea un nuovo modulo e incolla questo codice, poi consulta la finestra Immediata, dovresti vedere il risultato:

                                              Option Explicit
                                              
                                              Sub show_word_paragraphs()
                                              Dim para As Object
                                                  
                                                  For Each para In ActiveDocument.Paragraphs
                                                      Debug.Print para.Range.Text
                                                  Next
                                                  
                                              End Sub

                                              In alternativa, potresti anche esportare in (salvare come) file di testo e poi tentare il recupero da Excel.

                                              #13087 Score: 0 | Risposta

                                              Giox06
                                              Partecipante

                                                In alternativa, potresti anche esportare in (salvare come) file di testo e poi tentare il recupero da Excel.

                                                Questo è quello che già sto facendo...

                                                la mia idea sarebbe quella di creare una urserForm che superi questo passaggio di export in txt e poi l'import in excel

                                                Quindi mi occorrerebbe (se è possibile) realizzare una macro che importi direttamente dal .docx di word linea x linea (cella x cella)

                                                prendendo in considerazione anche  il carattere ASCII numero 10 il LF (line feed) o anche \n e non  solo il il carattere numero 13 il CR (carriage return) o anche \r

                                                 dovresti vedere il risultato:

                                                Si cicla perfettamente, e vedo il risultato

                                                #13088 Score: 0 | Risposta

                                                vecchio frac
                                                Senior Moderator
                                                  238 pts

                                                  Giox06 ha scritto:

                                                  prendendo in considerazione anche  il carattere ASCII numero 10 il LF (line feed) o anche \n e non  solo il il carattere numero 13 il CR (carriage return) o anche \r

                                                  ma tu confermi che non devi spezzare una frase a metà giusto?

                                                  Cioè

                                                  CHIP	(FC) Insieme abbiamo sette figlie. Tre vivono 

                                                  deve restare unito:

                                                  CHIP	(FC) Insieme abbiamo sette figlie. Tre vivono ancora con noi, le più grandi si sono trasferite.

                                                  Dicevi sopra che la macro che da Excel si interfaccia a Word funziona, quindi per favore ripetimi il problema che hai nel sottoporre il file "originale" alla procedura.

                                                  #13097 Score: 0 | Risposta

                                                  Giox06
                                                  Partecipante

                                                    .....A1

                                                    CHIP (FC) Insieme abbiamo sette figlie. Tre vivono |deve essere trocata qui---> e questa stringa diventa una (riga/CELLA di excel) es A2

                                                    con noi, le più grandi si sono trasferite |--->(riga/CELLA di excel) es A3

                                                    ....A4

                                                    ....

                                                    SI, si deve spezzare tale e quale al file word

                                                    e quindi non deve restare unito

                                                    in pratica ogni cella deve contenere una riga del doc cosi come si visualizza

                                                    Sono riuscito a spiegarmi?

                                                    allego file

                                                    Allegati:
                                                    You must be logged in to view attached files.
                                                    #13104 Score: 0 | Risposta

                                                    vecchio frac
                                                    Senior Moderator
                                                      238 pts

                                                      Giox06 ha scritto:

                                                      Sono riuscito a spiegarmi?

                                                      Sì, ci sei riuscito, per quanto inusuale. Dicevo oggi che:

                                                      vecchio frac ha scritto:

                                                      è impossibile sapere quando finisce una riga (dipende dal tipo e dalla grandezza del font utilizzato e magari anche dalla percentuale di zoom)

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 34 totali)
                                                    Rispondi a: Macro per Importare in foglio excel le righe di un .doc o .docx nelle celle A:A
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: