+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: vba word 2016 ricerca valori in un file excel

  1. #1
    ginopizza non è in linea Scolaretto
    Post
    106

    vba word 2016 ricerca valori in un file excel

    Ciao

    Devo compilare dei dati in un documento word copiandoli da un file excel , ecco una parte del codice :

    codice:
    Sub test()
    
    
    Dim xlapp As Object 'Excel.Application
    Dim xlBook  As Object 'Workbook
    Dim xlSheet As Object
    Dim FindString As String
    'Dim Rng As Range
    Dim serie As Variant 'Excel.Range
    
    
    
    
    ' RICERCA IN RIS
    Set xlapp = CreateObject("Excel.Application")
    ' APRI LA COPIA DEL FILE RIS
    Set xlBook = xlapp.Workbooks.Open("C:\documenti\pippo.xls")
    ' SENZA FARLA VEDERE
    xlapp.Visible = False
    
    ' esempio ricerca
        FindString = "535017"
        
        Set xlSheet = xlBook.Worksheets(1)
        
    
    ' ricerco nelle colonna A
        
        With xlSheet.Range("A:A")
                
    
            
                Set serie = .Find(FindString, _
                                After:=.Cells(.Cells.Count), _
                                LookIn:=xlValues, _
                                LookAt:=xlWhole, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlNext, _
                                MatchCase:=False)
    
    
                If Not serie Is Nothing Then
                    'xlapp.GoTo Rng, True
                    riga_find = serie.Row
                    MsgBox ("riga excel --> " & riga_find)
                    
                    'Stop
                Else
                    MsgBox "Nothing found"
                End If
            End With
                
           
                
    End Sub
    Con il codice in oggetto scritto in un modulo del documento Word , eseguo la ricerca nella colonna A del file excel pippo.xls.
    Quando trovo il valore , ottengo un msgbox con il Nr. di riga che mi interessa per importare i valori di alcune celle nel documento word.

    Per farlo funzionare devo aggiungere tra le referenze , Microsoft excel 16.0 object library e vorrei evitarlo per non vincolarmi alla versione di excel.
    Alcuni utilizzatori potrebbero avere versioni office differenti , quindi credo sia pericoloso.
    Come posso risolvere ?
    Grazie per l'aiuto.

  2. #2
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,688
    Quote Originariamente inviato da ginopizza Visualizza il messaggio
    Con il codice in oggetto scritto in un modulo del documento Word
    ...
    Per farlo funzionare devo aggiungere tra le referenze , Microsoft excel 16.0 object library e vorrei evitarlo per non vincolarmi alla versione di excel.
    Non sono proprio il più esperto in materia di VBA con Word ed Excel però so rispondere alla tua domanda.
    Devi usare il latebinding puro. Hai iniziato bene con l'uso delle variabili Object poi però ti sei lasciato intrappolare dall'uso delle costanti del modello ad oggetti di Excel, quelle che iniziano solitamente con xl. Ad esempio qui
    codice:
                Set serie = .Find(FindString, _
                                After:=.Cells(.Cells.Count), _
                                LookIn:=xlValues, _
                                LookAt:=xlWhole, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlNext, _
                                MatchCase:=False)
    sei costretto a lasciare il riferimento alla libreria di Excel perché altrimenti durante l'esecuzione VBA non saprebbe attribuire alcun valore/significato a xlValues, xlWhole, xlByRows, xlNext.
    Ecco quindi che devi essere tu ad attribuire il giusto significato a quelle costanti dichiarandole in un modulo standard. Questo ti permetterà di togliere il riferimento alla libreria di Excel.
    Per conoscerne il valore puoi usare la classica finestra immediata con un
    codice:
    ? xlValues
    oppure cercare sulla guida, oppure ancora interrompendo l'esecuzione del codice con un punto di interruzione strategico e posizionandoti con il mouse sopra la costante.
    Non sottovalutare l'uso della compilazione condizionale visto che l'earlybinding durante lo sviluppo è di grande aiuto e l'uso della compilazione condizionale ti permette di distribuire il tuo lavoro senza dover fare mille modifiche manuali.
    Leggi questa pagina LATEBINDING Vs EARLYBINDING nonché i link che riporta nella sua firma l'utente gibra (che ha scritto anche in quella pagina)

  3. #3
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,148
    Quote Originariamente inviato da ginopizza Visualizza il messaggio
    Per farlo funzionare devo aggiungere tra le referenze , Microsoft excel 16.0 object library e vorrei evitarlo per non vincolarmi alla versione di excel.
    Perché?
    Tu stai già usando Excel in Late-Binding quindi non vedo il problema.
    Per cui non serve che tu aggiunga il riferimento alla libreria Excel.

    Segui il suggerimento di @Phil_cattivocarattere e non avrai problemi.

    L'unico suggerimento che ti posso dare è quello di dichiarare

    Dim serie As Object 'Excel.Range

    invece di usare
    Dim serie As Variant 'Excel.Range

    Riguardo al Late-Binding esiste comunque un escamotage per cui sfruttando le costanti condizionali puoi usare l'Early-Binding, in progettazione, così da sfruttare l'Intellisense del VBA, e prima di distribuire imposti il Late-Binding, fai i dovuti test, e poi distribuisci il file Word.

    Vedi questi esempi, anche se in pratica 'partono' da Excel verso Word (mentre tu usi Word verso Excel) il funzionamento dell'Early/Late binding è identico:

    Tutorial - Compilare una lettera di Word con dati da Excel
    https://www.forumexcel.it/forum/thre...a-excel.23531/

    Tutorial - Compila Solleciti Word con dati da Excel
    https://www.forumexcel.it/forum/thre...a-excel.24584/

    Tutorial Gestione lettere di sollecito in Word
    https://www.forumexcel.it/forum/thre...in-word.24971/

  4. #4
    ginopizza non è in linea Scolaretto
    Post
    106
    Grazie !
    Attribuendo i valori alle costanti excel ho risolto.
    I valori da assegnare li ho rilevati , come suggerito , mettento in stop il programma è posizionando il cursore sulle costanti in oggetto.
    Senza i vostri consigli non ci sarei mai arrivato.
    Ciao.

  5. #5
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,148
    I valori delle costanti li puoi tranquillamente reperire dal Visualizzatore Oggetti (premi F2) che è fatto appositamente per ottenere informazioni varie di tutte le librerie relazionate al progetto corrente.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi