Entra

View Full Version : [Excel VBA] Funzione creata dall'utente in VBA


ficuste
19-02-2010, 11:03
Ciao a tutti, non prendo in mano VBA da un sacco di tempo e avrei un problema.
Devo scrivere una funzione "user defined" che praticamente esegue più operazioni ed espande il contenuto dei risultati su più celle, non soltanto su quella dove è stata inserita la funzione. Per esempio, se ho una funzione che esegue la somma, la differenza e la moltiplicazione di due interi passati come parametri, voglio che la funziona scriva i tre risultati in tre celle diverse. Come fare? C'entrano qualcosa gli array?

Grazie

MarcoGG
19-02-2010, 18:11
Devo scrivere una funzione "user defined" che praticamente esegue più operazioni ed espande il contenuto dei risultati su più celle, non soltanto su quella dove è stata inserita la funzione.


Errore. Questa non è una Funzione, e in ogni caso non va messa in una cella. Semmai è una Public Sub che deve stare in un Modulo.


Per esempio, se ho una funzione che esegue la somma, la differenza e la moltiplicazione di due interi passati come parametri, voglio che la funziona scriva i tre risultati in tre celle diverse. Come fare? C'entrano qualcosa gli array?


No, in questo caso specifico gli Array non c'entrano nulla.
Quello che vuoi tu è questo :

Public Sub Risultati(num1 As Integer, num2 As Integer, nomeFoglio As String)

Dim somma As Long
somma = num1 + num2
Dim differenza As Long
differenza = num1 - num2
Dim prodotto As Long
prodotto = num1 * num2

Sheets(nomeFoglio).Range("A1").FormulaR1C1 = somma
Sheets(nomeFoglio).Range("A2").FormulaR1C1 = differenza
Sheets(nomeFoglio).Range("A3").FormulaR1C1 = prodotto

End Sub

E ad es. la usi così :
Private Sub CommandButton1_Click()

Risultati 100, 50, "Foglio2"

End Sub
;)

ficuste
20-02-2010, 10:31
Se scrivo che voglio una FUNZIONE, è perchè deve essere una FUNZIONE e non una procedura o "Sub". La Sub la sapevo scrivere anche da solo.

MarcoGG
20-02-2010, 11:16
Se scrivo che voglio una FUNZIONE, è perchè deve essere una FUNZIONE e non una procedura o "Sub". La Sub la sapevo scrivere anche da solo.

Auguri.
Allora tolgo decisamente il disturbo. :ciapet:

ficuste
23-02-2010, 16:41
UP!

Rispiego il problema: io ho bisogno di una funzione VBA user-defined (tipo quelle che richiami scrivendo in una cella di Excel "=NOME_FUNZIONE(parametri)") che esegua determinate operazioni e visualizzi il contenuto di queste operazioni nella cella in cui ho scritto la funzione ma anche nelle celle vicine, eventualmente sovrascrivendone il contenuto. Non mi serve una Procedura (Sub in VBA) perchè poi lo stesso meccanismo lo devo applicare a una funzione già esistente.

Ad esempio: se ho una funzione "=eseguiQuery(querySQL)" che esegue una interrogazione ad un DB, il risultato della funzione sarà ovviamente uno o più record. Come faccio a stampare il/i record nelle celle vicine a quella dove ho richiamato la funzione? Spero sia chiaro...

a2000.1
12-08-2010, 01:22
Ciao a tutti, non prendo in mano VBA da un sacco di tempo e avrei un problema.
Devo scrivere una funzione "user defined" che praticamente esegue più operazioni ed espande il contenuto dei risultati su più celle, non soltanto su quella dove è stata inserita la funzione. Per esempio, se ho una funzione che esegue la somma, la differenza e la moltiplicazione di due interi passati come parametri, voglio che la funziona scriva i tre risultati in tre celle diverse. Come fare? C'entrano qualcosa gli array?

Grazie



Function f_aaa(a, b) As Variant
Dim v(1 To 1, 1 To 3) As Variant

v(1, 1) = a + b
v(1, 2) = a - b
v(1, 3) = a * b
f_aaa = v

End Function


selezioni tre celle riga adiacenti > Ctrl+Alt+Enter


Le funzioni in VBA possono restituire scalari, vettori e matrici a piacere.

Ma anche vettori di vettori (matrici di matrici): a(1,6)(1,8,4)(3)(1,3,7,8,5)

;)