richiamo funzione in vba
Hai un problema con Excel? 
richiamo funzione in vba
di rita (utente non iscritto) data: 07/02/2013 16:48:59
Ciao a tutti
un quesito.....
come mai in vba l'applicativo che richiama uan funzione (vedi qui sotto) richiama solo delle funzioni scartandone altre ?
C'e' la possbilita' di poterle richiamare tutte e sopratutto c'e' la possibilita', avendone creata una (per capirci quelle che si richiamano nel foglio come funzioni definite dall'utente) di poterla richiamare.
scusate i tanti .....richiama
Application.WorksheetFunction. ...qui si apre la casellina per la scelta delle funzioni
Grazie
di Riccardo (utente non iscritto) data: 07/02/2013 18:45:39
Ti do il mio modesto parere sulla questione:
L'applicazione richiama solamente le funzioni che restituiscono un valore di qualsiasi tipo (numerico, stringa, ecc.) non richiama le cosiddette sub che sono le subroutine che possono essere chiamate solo dall'interno di altri programmi.
Per quanto riguarda la seconda domanda: certo che esiste la possibilità di richiamarla nel foglio di lavoro dove hai creato la funzione con la semplice sintassi seguente; scrivi in una cella del foglio l'istruzione:
=MiaFunzione(parametro 1; parametro2; parametro3; eccetera)
Otterrai in quella cella il valore restituito dalla tua funzione.
Ma c'è di più: se vuoi utilizzare quella funzione in diversi fogli non occorre riscriverla tutte le volte, ma sarà sufficiente scriverla una sola volta nella cartella Personal.xls che è la cartella che rimane nascosta, trasparente all'utente, dove all'interno di un modulo si possono scrivere tutte le funzioni di uso frequente.
Da qualsiasi foglio le potrai richiamare con la semplice sintassi di prima ricordando però che la funzione si trova nella cartella Personal.xls, e cioè:
=Personal.xls!MiaFunziona(parametro 1; parametro2; parametro3; eccetera)
Nota il (punto esclamativo) che separa la cartella Personal.xls dal nome di funzione.
In realtà potresti scrivere tutte le tue funzioni in un altra cartella chiamata per esempio "LibreriaFunzioni.xls", ma saresti costretta ad aprirla sempre per utilizzare le sue funzioni, invece la cartella Personal è sempre aperta anche se trasparente all'utente e non richiede di essere aperta appositamente.
Ovviamente le istruzioni di sopra si riferiscono alla chiamata di una funzione nelle celle di un Foglio di lavoro, mentre la sintassi di chiamata all'interno di un modulo VBA è diversa, ma parimenti semplicissima:
codice ....
risultato = Application.Run("nomefunzione", "argomentoFunzione", altroArgomentoFunzione)
oppure, se la funzione si trova in personal,
risultato = Application.Run("personal.xls!nomefunzione", "argomentoFunzione", altroArgomentoFunzione)
codice ....
Spero di essere stato chiaro.
Ciao
Riccardo
Application.Run("personal.xls!ContaRighe", WB, WS)
di Rita (utente non iscritto) data: 08/02/2013 00:15:46
Grazie Riccardo proverò e farò sapere
di chpd (utente non iscritto) data: 11/02/2013 14:28:14
un informazione, premetto che sono ai primi passi.
sto usando lo sviluppatore vba di Excel 2007, vorrei chiedervi dopo aver creato un piccolo programma, come posso salvarlo per renderlo usabile senza che mi si apra Excel, tipo un .exe e che non mi chieda l'attivazione macro ma che esegua in automatico.
grazie
di Vecchio Frac data: 11/02/2013 16:04:24
@chpd
Apri una nuova discussione, grazie.
@Riccardo
cit. " la cartella Personal.xls che è la cartella che rimane nascosta, trasparente all'utente "
---> in realtà il file può chiamarsi come si vuole, basta che sia in XLSTART e verrà caricato da Excel all'avvio. Le sue sub e funzioni (almeno quelle pubbliche) possono essere richiamate anche senza Run, ma con un semplice Call. L'inconveniente è che si apre automaticamente (a me invece piace sempre partire da zero e poichè ormai avrei centinaia di sub e funzioni disseminate, mi troverei con file di partenza già giganti... per questo preferisco copiaincollare solo le funzioni che mi servono in ogni progetto).
di Riccardo (utente non iscritto) data: 11/02/2013 17:18:59
@Vecchio Frac
Pregevoli informazioni le tue Vecchio Frac: ne farò tesoro.
Però io avevo provato a chiamare le funzioni senza l'istruzione "Run" e non m i partivano, dove sbagliavo?
Mi fai un esempio di sintassi di chiamata di una funzione residente nel Personal da un modulo di un'altra cartella, per favore?
Grazie
Riccardo
di Vecchio Frac data: 11/02/2013 22:04:38
Le Sub e Function devono essere dichiarate Public altrimenti non sono visibili al progetto.
Public Sub test()
End Sub
Public Function test(x as String) as Boolean
End Function
di Riccardo (utente non iscritto) data: 12/02/2013 09:48:02
@Vecchio Frac
Ti ringrazio per l'esempio di sintassi di dichiarazione di una funzione pubblica, ma io ti chiedevo l'esempio di sintassi di chiamata di una funzione residente nel Personal da un modulo di un'altra cartella.
Cioiè: definita e scritta la funzione nel PERSONAL.XLS
Public Function test(x as String) as Boolean
End Function
Con quale sintassi devo richiamarla nel modulo VBA del foglio di lavoro dove la utilizzo?
Io scrivevo:
risultato = Application.Run("personal.xls!nomefunzione", "argomentoFunzione", altroArgomentoFunzione)
Ma tu mi hai detto che si può fare a meno dell'istruzione "Run". A me non funziona senza "Run", come devo chiamarla?
Spero di essere stato chiaro.
Grazie
di Vecchio Frac data: 12/02/2013 11:16:09
@Riccardo
Sicuramente non mi sono spiegato bene, scusami.
Se (uso Seven e Excel 2003) il file Personal.xls (o comunque si chiami) risiede in
C:UsersAppDataRoamingMicrosoftExcelXLSTART
viene richiamato (aperto) ogni volta che si avvia una sessione di Excel.
Tutti i suoi moduli e funzioni sono visibili al progetto Personal.xls (se dichiarati Public) e si possono chiamare direttamente:
Call test
x = test("prova")
Naturalmente il codice di questo file è visibile *solo* al proprio progetto.
Aprendo una nuova cartella di lavoro (Ctrl-N) si apre un file diverso (a partire da "Cartel1") che non vede i moduli delle altre cartelle di lavoro (le cui sub e funzioni dichiarate Public però si richiamano con Run, come già sai).
di Riccardo (utente non iscritto) data: 12/02/2013 14:13:11
Adesso mi è più chiaro. Grazie proverò così.
Riccardo
Vuoi Approfondire?