Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

VBA x Excel: leggere dati da un foglio chiuso

Hai problemi con i file Zip, vuoi formattare l'HD, non sai come funziona FireFox? O magari ti serve proprio quel programmino di cui non ricordi il nome! Ecco il forum dove poter risolvere i tuoi problemi.

Moderatori: Dylan666, hydra, gahan

VBA x Excel: leggere dati da un foglio chiuso

Postdi spree » 15/12/03 21:44

Salve,
ho un problema che proprio non riesco a risolvere.
Devo scrivere una macro VBA in Excel che permetta di calcolare un valore sulla base di dati che devo prelevare da diversi fogli excel chiusi.
Non riesco a trovare il modo giusto per farlo.

Grazie a chi vorrà darmi un aiuto

davide
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Sponsor
 

Postdi ezechiel2517 » 16/12/03 09:48

Soluzione 1 (non risolvi ma aggiri l'ostacolo): apri il foglio di lavoro...prendi le informazioni che ti sevono e lo richiudi

OKOKOKOK...questa era la soluzione stupida...ora passiamo a quella seria ;)
Questa qui sotto fa la somma di tutte le cellette nel file (CHIUSO!)c:\pippo\pluto.xls, nel foglio Info, che vanno da g1 a g10 e fa apparire una finestrella in cui viene riportato il risultato.

Sub GetDataFromClosedFile()
filepath = "c:\pippo"
Filename = "pluto.xls"
sheetname = "Info"
Strg = "sum('" & filepath & "\[" & Filename & "]" & sheetname & "'!r1c7:r106c7)"
MsgBox ExecuteExcel4Macro(Strg)
End Sub

Idee per customizzare
:arrow: cambiare il path, il nome e il foglio ;)
:arrow: aggiungere un check per eventuali errori (come l'inesistenza del foglio ;) )
:arrow: assegnare il risultato ad una variabile


HTH
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi spree » 16/12/03 10:23

Ti ringrazio molto per il tuo aiuto.
Purtroppo però non mi risolve il problema nessuna delle due soluzioni :((
La prima soluzione è quella che uso attualmente in realtà.
Nel senso che la macro VBA di calcolo lavora correttamente a patto che tutti i fogli da cui leggere i dati siano aperti. Il problema è che il numero di fogli da cui devo leggere cresce dinamicamente. Adesso sono 4 ma dovrò a regime leggere da ben 30 fogli :cry: .
Attualmente utilizzo l'oggetto Workbooks(<nome_foglio>) per fare riferimento al foglio, l'oggetto Worksheets(<nome_sheet>) per fare riferimento allo sheet, e l'oggetto Range(<celle>) per fare riferimento all'area da cui voglio leggere. Però, come detto, tutto funziona se i folgi sono tutti aperti.
La seconda soluzione, invece, non va bene perché la Macro deve eseguire diverse operazioni sui fogli, tra cui una ricerca, una confronto, una lettura condizionata e alla fine il calcolo.
Quindi non posso riassumere tutto in una funzione Excel come nel tuo esempio per la funzione "sum". Spero di essere stato chiaro :)).
Esisterà il modo per agire su un foglio chiuso come se fosse "aperto"??
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi ezechiel2517 » 16/12/03 10:42

Prob: + di un foglio
Sol: metti un ciclo for o for each ;)

Prob: non e' una semplice formula
Sol: ExecuteExcel4Macro(stringa) esegue quanto scritto nella stringa...tu puoi benissimo mtterci un confronta un cerca.vert o un cerca.orizz...qualunque formuletta che funziona in una cella...funziona nella macro! :) Puoi anche eseguirla + di una volta! ;)
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi spree » 16/12/03 11:43

ezechiel2517 ha scritto:Prob: + di un foglio
Sol: metti un ciclo for o for each ;)

Prob: non e' una semplice formula
Sol: ExecuteExcel4Macro(stringa) esegue quanto scritto nella stringa...tu puoi benissimo mtterci un confronta un cerca.vert o un cerca.orizz...qualunque formuletta che funziona in una cella...funziona nella macro! :) Puoi anche eseguirla + di una volta! ;)


Hai detto bene, posso metterci qualsiasi formuletta che funziona in una cella ma purtroppo le funzioni che mette a disposizione Excel non ti permettono di fare tutto. Nel mio caso non riesco a fare quello che devo fare con le funzioncine excel, altrimenti non facevo una macro in VBA ma agivo direttamente sul folgio di lavoro.
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi archimede » 16/12/03 11:56

Forse così?

HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi spree » 16/12/03 12:45

Ho provato un inghippo utilizzando il suggerimento di usare la ExecuteExcel4Macro mettendo al posto delle funzioncine di Excel una funzione che ho scritto io, ma purtroppo non gli piace :((

Adesso vado a vedere la documentazione che mi hai linkato e ti farò sapere se risolvo il mio problema.

thanx
davide
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi ezechiel2517 » 16/12/03 12:47

spree ha scritto:Nel mio caso non riesco a fare quello che devo fare con le funzioncine excel, altrimenti non facevo una macro in VBA ma agivo direttamente sul folgio di lavoro.


In effetti mi stavo chiedendo come mai volessi farlo con VBA! ;)
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi ezechiel2517 » 16/12/03 12:49

spree ha scritto:Ho provato un inghippo utilizzando il suggerimento di usare la ExecuteExcel4Macro mettendo al posto delle funzioncine di Excel una funzione che ho scritto io, ma purtroppo non gli piace :((

Adesso vado a vedere la documentazione che mi hai linkato e ti farò sapere se risolvo il mio problema.


Quindi non gradisce le UDF? Ma forse si tratta solo di dargli i riferimenti dove andare a prenderla ! ;)

Cmq fai una prova con l'ADO! :)
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi spree » 16/12/03 12:52

Che intendi per riferimenti dove andare a prenderla?
La UDF sta in un modulo del foglio aperto..
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi spree » 16/12/03 12:59

Aspetta, mi sa che ho fatto io una ca....ta.
Sorry :)
Riprovo con la ExecuteExcel4Macro..
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi spree » 16/12/03 15:44

un altra domandina :lol:
Sto provando con la ExecuteExcel4Macro..forse ci riesco..però voglio evitare di inchidare il percorso assoluto dei file che vado a leggere.
Come faccio a dirgli che i file si trovano nella stessa folder del file excel aperto?
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi ezechiel2517 » 16/12/03 16:13

Visto che mi sembra di capire che te la cavi...ti indico la soluzione
ActiveWorkbook.FullName

Se hai problemi....chiedi ;)

HTH
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi ezechiel2517 » 16/12/03 16:15

Upps......se avessi letto prima di postare :oops: :oops:

ActiveWorkbook.FullName ti riporta il path e il nome del file in uso...quindi si tratta cmq di un percorso assoluto!!! :P
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi spree » 16/12/03 20:05

Sto per "sbroccare" :aaah .
Non mi funziona la ExecuteExcel4Macro, non c'è verso di farla funzionare.
Ho copiato gli esempi della guida e manco quelli funzionano.
Bisogna abilitare qualcosa? Cos'è che mi sfugge :cry: ?
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi ezechiel2517 » 17/12/03 10:28

Ma non ha mai funzionato????
Mi sembra di aver capito che ti funzionava all'inizio!!
Che errore ti da?
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi spree » 17/12/03 20:16

Allora,
mi da errore se lancio la ExecuteExcel4Macro all'interno di una mia UDF (definita in un modulo ovviamente) mentre funziona se la eseguo su un evento, ad esempio Worksheet_activate.
Mah... ci capisco sempre meno di sto VBA..
Ho visto che c'è anke l'alternativa di usare la Application.Run, però ancora non capisco se questa mi da la possibilità di lanciare una UDF (funziona similmente alla ExecuteExcel4Macro )
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi archimede » 18/12/03 09:32

Scusate se mi intrometto nuovamente (se disturbo ditelo ;)).

Per fare una cosa simile avevo provato questa soluzione:

1) Definisci quattro colonne (Percorso, File, Foglio e Cella) e ci metti i valori appropriati (C:\Documenti\, prova.xls, Foglio2, A2)

2) Nella quinta colonna definisci una formula (="='"&A1 & "[" & B1 & "]" &C1 & "'!" &D1) ottenendo una stringa ("='C:\Documenti\[prova.xls]Foglio2'!A2")

3) Duplichi la formula quanto necessario, selezioni tutte le celle così ottenute e usi la seguente macro per convertire la stringa in formula:
Codice: Seleziona tutto
Sub ConvStringToFormula()
Dim mieCelle As Range
For Each mieCelle In Selection
mieCelle.Formula = mieCelle.Text
Next
End Sub
HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi ezechiel2517 » 18/12/03 10:34

Archimede non ho capito il tuo suggerimento!!! :-?

Spree, ExecuteExcel4Macro non funziona con le UDF, o meglio non funziona se lo metti all'interno di una UDF o se la stringa che deve eseguire contiene una UDF (non ho provato con una UDF salvata nel file personal..ma non credo funzioni ;) ).

Per quanto riguarda Application.Run non so se funziona con i file chiusi...ma dato che gli puoi passare dei valori...potrebbe anche funzionare

Es.
pippo=ExecuteExcel4Macro(stringa1)
plutoo=ExecuteExcel4Macro(stringa2)
Application.Run(UDF, pippo, pluto)
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi archimede » 18/12/03 11:43

ezechiel2517 ha scritto:Archimede non ho capito il tuo suggerimento!!! :-?
Hai ragione. In effetti non mi sono spiegato per niente. Sorry.

Il metodo illustrato (invero un po' arzigogolato) lo avevo adottato perchè dovevo lavorare con diversi files e la loro posizione sul disco poteva cambiare: volevo quindi evitare di modificare tutte le formule ad ogni cambiamento (anche se alla fine non so quanto ho risparmiato in termini di click, ma questo non è interessante qui).

Quello che intendevo dire è che forse è più semplice importare in uno o più fogli di riepilogo tutti i dati che servono (provenienti dalle cartelle di lavoro chiuse) e poi usare questi nelle formule. Rileggendo però più attentamente la richiesta di spree, forse questo approccio non è praticabile nel suo caso.

Scusate per la perdita di tempo.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Prossimo

Torna a Software Windows


Topic correlati a "VBA x Excel: leggere dati da un foglio chiuso":


Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti