Differenza Sub da Function
Hai un problema con Excel? 
Differenza Sub da Function
di Mohican1989 data: 12/03/2015 22:28:38
Un un podi teoria, ho solo fatto 1 macro ed era un Sub, leggendo in questo forum ho trovato anche function, qual è la differenza? Quando è utile usare una sub e quando un function? In un altro post ho visto questo codice postato da aliframpa per contare le celle colorate in un Range (in questo caso righe di un database). La cosa che non mi torna subito è la parentesi dopo il nome dell function che io nelle sub ho sempre lasciato vuota. Cosa significa a as Range e poi a non la vedo più nel codice? Cel è impostata come variabile Range ma come fa a capire il comando dopo "if cel.Interior.ColorIndex" che cel è riferito a una cella del Range? Perché col è impostato come long al posto di che ne so integer? Dopo aliframpa ha scritto che può scrivere la formula =contacolore("a1:a6") nella cella dove vengo posto il risultato significa che con la function ha creato una formula personalizzata?grazie è scusate tutte le domande
Function contacolore(a As Range)
Dim cel As Range
Dim col As Long
col = 0
For Each cel In a
If cel.Interior.ColorIndex <> xlNone Then
col = col + 1
contacolore = col
End If
Next cel
End Function |
di alfrimpa data: 12/03/2015 23:38:04
Ciao Mohican1989, essendo stato chiamato in causa mi sento in dovere, almeno in prima istanza, di dover rispondere io (sono gradite eventuali integrazioni e/o correzioni)
Andiamo con ordine.
DIFFERENZA TRA SUB E FUNCTION
La Sub è un'insieme di istruzioni in VBA che eseguono un'azione ad esempio applicare un formato, copiare delle celle, incollare e mille altre cose.
Le Function sono, invece, istruzioni VBA che non eseguono un'azione ma restituiscono un risultato in base ai parametri passati ed alle regole di calcolo previste dalle istruzioni VBA.
Ora cerco di spiegare la mia function contacolore
Function contacolore(a As Range)
a è una variabile Range che accoglierà la zona su cui sarà effettuato il calcolo.
Dim cel As Range cel è una variabile Range utile per il ciclo For Each
Dim col As Long col è una variabile che fa da "contatore"
col = 0
For Each cel In a questo significa per ogni cella inclusa nell'intervallo a
If cel.Interior.ColorIndex <> xlNone Then se non c'è nessun colore di sfondo
col = col + 1 il contatore col si incrementa di una unità
contacolore = col al termine contacolore (uguale a col) esprimerà il numero delle celle colorate
End If chiusura dell'If
Next cel chiusura del ciclo For Each
End Function
Spero di essere stato chiaro.
Alfredo
di Mohican1989 data: 12/03/2015 23:58:44
Ciao Alfredo grazie della velocità, mi è chiaro come vengono contate le celle colorate quello che ancora la mia mente non vuole capire è: al posto della variabile a potevo mettere b?c? Nome qualsiasi? Lo stesso vale per cel? Potevo mettere cella? Celle? C? Non capisco come il programma intenda che quando gli dici guarda all interno di cel lui sa che stai parlando di una cella...grazie ancora
di lepat (utente non iscritto) data: 13/03/2015 09:18:51
per avere risposte più tecniche basta cercare con google "vba differenza tra Sub e Function", comunque la differenza più apprezzabile è che puoi utilizzare una function direttamente su foglio di lavoro esattamente come le funzioni già disponibili e quindi fare riferimento alle celle.
di alfrimpa data: 13/03/2015 10:27:25
Ciao Mohican
Si è esattamente come tu dici. Le variabili le puoi chiamare come vuoi.
Quello che è importante è il tipo con cui le si dichiara.
Se dichiari una variabile di tipo Range questa sarà considerata dal VBA, a tutti gli effetti, come una cella del foglio di lavoro (intesa come oggetto).
Se dichiariamo miavar as Range e se scriviamo miavar.Value il VBA farà riferimento al valore della cella oppure se diciamo miavar.Interior.ColorIndex si farà riferimento al codice numerico del colore della cella.
Spero di essere stato chiaro e se hai altre domande chiedi pure (sperando che sappia rispondere )
Alfredo
di Vecchio Frac data: 13/03/2015 10:55:38
Aggiungo qualcosa a quanto dice Alfrimpa
Alcune avvertenze, le prime che mi vengono in mente.
cit. " Le variabili le puoi chiamare come vuoi. "
---> Ci sono dei limiti:
- una variabile deve cominciare con una lettera e può contenere lettere, numeri e l'underscore "_"
- non puoi dare a una variabile il nome di una variabile già dichiarata dentro il proprio ambito di validità (univocità delle variabili)
- le variabili non possono essere più lunghe di 255 caratteri
- le variabili non possono contenere un punto
- non puoi dare a una variabile il nome di un'istruzione (For, Next, End, Sub, ...)
- puoi dare una variabile il nome di un oggetto predefinito, ma siccome lo ridefinisci poi succede un casino (es. dim range as integer)
Bisognerebbe poi dare alle variabili nomi significativi anche se sono ammessi tutti quelli consentiti.
Tendenzialmente la maggior differenza tra sub e function in Excel è che queste ultime possono diventare funzioni definite dall'utente utilizzabili come le normali formule del foglio di calcolo, richiamabili quindi anteponendo il segno di uguale "=" (con alcuni limiti nel codice che vi si può eseguire).
di alfrimpa data: 13/03/2015 11:12:55
Ciao Vecchio Frac
Grazie per le preziose precisazioni.
Alfredo
Vuoi Approfondire?