cercavert su altra cartella



  • cerca.vert su altra cartella
    di kaigoo66 data: 01/07/2014 22:36:19

    Buonasera,
    premetto che conosco molto poco VBA quindi scusate eventuali mancanze
    Come da codice riportato utilizzo un cerca verticale per ricercare un dato e riportarlo in una cella di destinazione (D5)
    e fin qui nessun problema. Mi serve la stessa logica per un cerca verticale che punti su una cartella esterna (sempre di excel)
    che potrebbe essere sia chiusa che aperta.
    Quindi ci sarebbe da modificare la seconda parte della formula cioè in C:Documenti....Worksheets("Gruppi").Range("A:BC"), 12, False)
    ho provato alcuni sistemi senza nessun risultato
    Grazie anticipatamente
     
    Cells(5, 4) = WorksheetFunction.VLookup(Worksheets("Compilatore").Range("A5"), Worksheets("Gruppi").Range("A:BC"), 12, False)



  • di Grograman (utente non iscritto) data: 02/07/2014 16:09:44

    Uhm... a naso non potrà mai funzionare se il file è chiuso, indipendentemente dalla sintassi.

    Questo perchè l'erore del Vlookup NON è gestito dalla worksheetfunciton e la formula su un file chiuso darà appunto SEMPRE l'errore.

    Se invece ci alleghi il file possiamo vedere come scriverla per usare una variabile al posto del percorso fisso.



  • di alfrimpa (utente non iscritto) data: 03/07/2014 11:40:50

    Ciao Grograman

    Lungi da me l'intenzione di volerti smentire (sono frequentatore anche di altri forum su Excel quindi ti "conosco" e ti stimo tantissimo ma.

    se in un file chiamato "prova.xlsx" ho la seguente tabella

    mario rossi 10
    alfredo bianchi 20
    giuseppe verdi 30

    ed in altro file (con "prova.xlsx" chiuso) inserisco la seguente formula

    =CERCA.VERT(D1;'C:prova[prova.xlsx]Foglio1'!A1:C10;2;FALSO) viene restituito il dato corretto.

    Se quindi la cosa funziona sul foglio di lavoro non si dovrebbe arrivare allo stesso risultato anche con il VBA?

    Mi farebbe piacere conoscere il tuo illuminato parere

    Un saluto.

    Alfredo





  • di lepat (utente non iscritto) data: 03/07/2014 11:47:23

    perché perdere tempo a fare congetture senza avere i file su cui lavorare ?



  • di alfrimpa (utente non iscritto) data: 03/07/2014 12:02:21

    Si Lepat hai perfettamente ragione.

    Poiché ricordavo che in Excel si potevano inserire sul foglio di lavoro funzioni con riferimenti a file esterni (chiusi) ho solo cercato di verificare se il mio ricordo fosse giusto o meno

    Comunque, in linea generale, se tu dovessi "tradurre" in VBA la predetta CERCA.VERT come la scriveresti?

    Io c'ho provato ma mi dà sempre errore per la presenza degli apici e del punto esclamativo.

    Giusto sempre per imparare qualcosa in più.

    Alfredo





  • di alfrimpa (utente non iscritto) data: 03/07/2014 12:17:41

    Aggiungo che in VBA ci dovrebbe essere il modo (in Application.WorksheetFunction.VLookup) di inserire il percorso completo di un file sostituendo gli apici ed il punto esclamativo (previsti dalla sintassi per il cerca.vert sul foglio di lavoro) con qualcos'altro. Si tratta di scoprire con cosa.

    Ho fatto qualche ricerca in rete ma non sono stato capace di trovare nulla.

    Alfredo





  • di alfrimpa (utente non iscritto) data: 03/07/2014 12:40:33

    Ho provato a buttar giù una UDF ma alla riga n. 4 "Set miofoglio = "C:prova[prova.xlsx]Foglio1"
    mi dà "Errore di compilazione - Tipo non corrispondente"

    Dove sbaglio?

    Alfredo
     
    Function Trovavalore(cella)
    Dim tabella As Range
    Dim miofoglio As Worksheet
    Set miofoglio = "C:prova[prova.xlsx]Foglio1" <-- su questa riga mi dice "tipo non corrispondente"
    Set tabella = miofoglio.Range("A1:C10")
    Trovavalore = Application.WorksheetFunction.VLookup(cella, tabella, 2, False)
    End Function
    






  • di lepat (utente non iscritto) data: 03/07/2014 13:04:49

    "C:prova[prova.xlsx]Foglio1" è una stringa, quindi non la puoi assegnare ad una variabile Worksheet



  • di alfrimpa (utente non iscritto) data: 03/07/2014 13:47:26

    Si d'accordo ma se dichiaro miofoglio as string mi va in errore alla successiva istruzione dicendomi "Necessario oggetto".

    Come si fa ad impostare miofoglio con un foglio presente in un file esterno (chiuso)?

    Alfredo





  • di Grograman (utente non iscritto) data: 03/07/2014 14:27:53

    Ad ogni modo ha ragione lui... funziona anche a file chiuso!

    Mi sconfondevo mi sa con la INFO.DATI.PIVOT

    Sorry!



  • di Grograman (utente non iscritto) data: 03/07/2014 14:30:56


     
    Option Explicit
    
    Sub verto()
    Dim sPath As String, sFile As String, sSheet As String
    
    
    sPath = "C:prove"
    sFile = "prova.xlsx"
    sSheet = "Foglio1"
    
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],'" & sPath & "[" & sFile & "]" & sSheet & "'!RC[-1]:R[9]C[1],1,FALSE)"
    End Sub
    



  • di alfrimpa (utente non iscritto) data: 03/07/2014 14:36:59

    Grogr

    Ma "lui" sarei io?

    Ma non te la puoi cavare così! Possibile che un riconosciuto mago del VBA come te non riesca a tradurre un banale cerca.vert su un file esterno in Visual Basic?

    Stavo pensando un'alra cosa: e se si passasse (come parametro della function) anche il path del file secondo te funzionerebbe? Anche se poi c'è la seccatura di dover scrivere detto path in una cella del foglio.

    Alfredo





  • di alfrimpa (utente non iscritto) data: 03/07/2014 14:38:31

    Perdonami Grogr

    ma mentre scrivevo ho visto che hai risposto.

    Alfredo





  • di Grograman (utente non iscritto) data: 03/07/2014 14:46:19



    Bhè non è proprio quella che volevi tu, usa la formula lato foglio e non il vlookup di vibia!



  • di alfrimpa (utente non iscritto) data: 03/07/2014 15:01:04

    In verità io cercavo una qualche soluzione al quesito posto inizialmente da Kaigoo66 che poi non è più intervenuto.

    Anch'io avrei usato il cerca.vert lato foglio.

    Comunque grazie delle tue risposte.

    Alfredo





  • di kaigoo66 (utente non iscritto) data: 03/07/2014 17:46:44

    Buonasera a tutti e grazie per le risposte
    volevo inserire i file, ma avete fatto tutto lo stesso.
    Ho provato e funziona dovrò fare alcune modifiche, ma nella totalità è ottimo
    e grazie ancora