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

Postdi spree » 20/12/03 23:03

Eccomi di nuovo :((
Sono sulla buona strada con la ExecuteExcel4Macro.
Il problema è che non so quali funzioni posso lanciare.
Mi servirebbe lanciare la seguente funzione:
=SE(VAL.NON.DISP(CERCA.VERT(C65;InizioTab:FineTab;16;FALSO)); "nd";CERCA.VERT(C65;InizioTab:FineTab;16;FALSO))
In sostanza devo capire come mettere nella stringa che passo alla ExecuteExcel4Macro le funzioni SE, VAL.NON.DISP e CERCA.VERT con la sintassi giusta.

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

Sponsor
 

Postdi ezechiel2517 » 22/12/03 10:17

Non l'ho testato...ma dovrebbe funzionare ;)

Codice: Seleziona tutto
pippo=ExecuteExcel4Macro(cerca.vert(...))
IF pippo=xlerrNA then
   pippo="nd"
ENDIF


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

Postdi spree » 22/12/03 15:46

mi potresti postare un esempio testato, a me proprio non funziona :aaah
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi ezechiel2517 » 22/12/03 16:29

Porc :aaah :aaah
certo che posso...ma richiedera' tempo!! :-?
sehr zeit!!! :neutral:
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi spree » 22/12/03 16:49

consolati, ci sto provando ank'io da un pezzo :aaah :aaah
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi spree » 22/12/03 18:07

niente da fare..
Ho provato con:
Application.ExecuteExcel4Macro("vlookup(3,foglio1!r1c1:r5c1,2,false)")
e con
Application.ExecuteExcel4Macro("cerca.vert(3,foglio1!r1c1:r5c1,2,falso)")

niente............ :aaah :aaah
Possibile che questa ExecuteExcel4Macro sia un mistero per tutti!?!?!?!
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi Dylan666 » 22/12/03 19:15

Ammetto ke mi avete incuriosito: io Excel lo so usare poco, e quel poco l'ho scordato eppure quiparla kiaro:

Calling Application.ExecuteExcel4Macro
You can call add-in functions from VBA by using the Application.ExecuteExcel4Macro(macro) method. The macro argument should contain a string that looks just like an Excel formula, but with all the arguments passed as absolute values, rather than cell references, and without an "=" sign at the front.

For example, to find the SUM of 2 & 3, the macro should contain "SUM(2,3)", and you would invoke it with the following line of code:

res = Application.ExecuteExcel4Macro("SUM(2,3)")


Array arguments should be contained in curly braces, with commas separating cells and semi-colons separating rows, e.g.: {1,2,3} or {1,2,3;4,5,6}.

String arguments should be surrounded by quotes (which must be escaped as double-quotes in VBA). e.g.:

res = Application.ExecuteExcel4Macro("CONCATENATE(""abc"",""def"")")


Possibile ke il codice d spree nn funzioni proprio? :roll:
Avatar utente
Dylan666
Moderatore
 
Post: 40100
Iscritto il: 18/11/03 16:46

Postdi spree » 23/12/03 00:00

Fermi tutti....sono riuscito a far funzionare la ricerca.
Bisogna utilizzare la VLookup. Porca putt...
Ecco un esempio:

path="c:\documenti"
file="pippo.xls"
sheet="tab"
range="r1c1:r2c10"
word="ciao"
arg="'" & path & "\[" & file & "]" & sheet & "'!" & range
str="vlookup(""" + word + """," & arg & ",2,false)"
msgbox ExecuteExcel4Macro(str)

Mi rimane un problema :D

Dovrei mettere questa ricerca all'interno di una UDF che utilizzo all'interno di una cella. Mi spiego meglio..
All'interno di una cella scrivo "=cerca(C3)"
La cerca è una UDF fatta così:

Function cerca(cella As string)
path="c:\documenti"
file="pippo.xls"
sheet="tab"
range="r1c1:r2c10"
arg="'" & path & "\[" & file & "]" & sheet & "'!" & range
str="vlookup(""" + cella + """," & arg & ",2,false)"
msgbox ExecuteExcel4Macro(str)
end function

Il problema è, come vi dicevo, che se si lancia la ExecuteExcel4Macro all'interno di una UDF richiamata si ottiene un errore.
Aiutino.... :D
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi ezechiel2517 » 23/12/03 09:48

spree ha scritto:Fermi tutti....sono riuscito a far funzionare la ricerca.
Bisogna utilizzare la VLookup. Porca putt...

Programmando in vba DEVI mettere le funzioni in inglese!!! ;)

Per il secondo problema: hai provato a usare una macro invece di una funzione?
Codice: Seleziona tutto
Sub cerca()
path="c:\documenti"
file="pippo.xls"
sheet="tab"
range="r1c1:r2c10"
arg="'" & path & "\[" & file & "]" & sheet & "'!" & range
str="vlookup(""" + cella + """," & arg & ",2,false)"
ActiveCell.Value=ExecuteExcel4Macro(str)
end Sub


.....non l'ho testato! :D (ma forse convine che inizio a mettermici d'impegno...che se non risolviamo entro oggi....si va al 7 gennaio!!! :P )
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi spree » 23/12/03 10:24

Si ma come la richiamo una macro all'interno di un cella????
La UDF la posso trattare come una funzione Excel e quindi posso scrivere nella cella: =MyFunc()

Spero di essere stato chiaro :D :lol: :D .
Per favore impegnati che sennò passo tutte le feste con il pensiero della ExecuteExcel4Macro :D
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi ezechiel2517 » 23/12/03 10:33

spree ha scritto:Si ma come la richiamo una macro all'interno di un cella????


hai due metodi:
1) selezioni la cella che ti interessa e lanci quella che ti ho scritto sopra(puoi anche assegnare una sequenza di tasti)

2) in qualsiasi punto del foglio lanci la versione leggermente modificata che trovi qua sotto (che ti inserisce il valore che vuoi nella cella c29)
Codice: Seleziona tutto
Sub cerca()
path="c:\documenti"
file="pippo.xls"
sheet="tab"
range="r1c1:r2c10"
arg="'" & path & "\[" & file & "]" & sheet & "'!" & range
str="vlookup(""" + cella + """," & arg & ",2,false)"
[c29].Value=ExecuteExcel4Macro(str)
end Sub


Per assegnare una sequenza di tasti rapidi....c'e' un metodo + semplice...ma non mi ricordo com'e' il codice in italiano...quindi ALT+F8 selezioni la macro e ti si abilita il tasto Opzioni.

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

Postdi spree » 23/12/03 10:49

Provo a vedere la seconda ma non mi sembra l'ideale :D .
Ti spiego:
supponiamo che io sia all'interno della cella C3.
La mia necessità è quella di scrivere all'interno della cella '=cerca(B3)'.
In questo modo lui mi restituisce il risultato della ricerca nella cella C3.
A questo punto posso copiare la stessa formula all'interno di un centinaio di altre celle.
Excel in automatico mi aggiorna la cella argomento ogni volta che la copia ed il gioco è fatto. E' per questo che sono costretto ad usare la UDF. Non è che ne sono innamorato :D

strugglin' on this issue :aaah
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Postdi ezechiel2517 » 23/12/03 10:58

spree ha scritto:Ti spiego:


Ti rispondo:
Esistono i FOR/FOR EACH - NEXT proprio per questo ;) !

Anche qui 2 possibilita' di soluzione:
1) un loop che inizia nella prima cella della colonna b e finisce con l'ultima cella non vuota della colonna b
2) selezioni le celle che ti interessano nella colonna b e gli dici di ripetere FOR EACH row in selection

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

Postdi ezechiel2517 » 23/12/03 11:31

OK...mosso a pieta' :) ti posto questo codice che ho appena testato!!! ;)

Codice: Seleziona tutto
Sub cerca()
Set rng = Selection  '<===
path="c:\documenti"
file="pippo.xls"
sheet="tab"
range="r1c1:r2c10"
arg="'" & path & "\[" & file & "]" & sheet & "'!" & range

For Each cell In rng
cell.Select  <= non e' elegante....ma non mi andava di smanettare troppo, mi sto arrugginendo con excel  :P
pippo = cell.Value
str="vlookup(""" + pippo + """," & arg & ",2,false)"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell..Value = ExecuteExcel4Macro(Str)
Next cell

End Sub


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

Postdi ezechiel2517 » 23/12/03 11:34

ezechiel2517 ha scritto:OK...mosso a pieta' :) ti posto questo codice che ho appena testato!!! ;)


E che ho copiato male :P
qui ho dimenticato l'apice per il commento
cell.Select '<= non e' elegante......

(qui niente secondo punto)
ActiveCell..Value = ExecuteExcel4Macro(Str)
ezechiel2517
Utente Senior
 
Post: 1598
Iscritto il: 05/04/02 20:21

Postdi spree » 29/12/03 15:10

Ok, mi funziona tutto adesso :D .

Grazie a tutti.
spree
Utente Junior
 
Post: 17
Iscritto il: 15/12/03 21:37

Precedente

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 10 ospiti