Richiamare variabili delle sub
Hai un problema con Excel? 
Richiamare variabili delle sub
di Matbuz (utente non iscritto) data: 26/03/2014 17:26:41
Buonasera a tutti,
io ho un codice molto lungo che, per comodità di lettura, volevo spezzettare in varie sub in maniera tale da avere un codice più snello e semplice da leggere.
L'idea mia era quindi di prendere i vari pezzi del codice e metterli ognuno in una sub per poi richiamarle tramite Call.
Il problema che mi si pone è che le variabili che calcolo all'interno delle sub non vengono riportate nel codice principale e quindi il programma non continua correttamente.
Non so se sono stato in grado di spiegarmi bene. Vi porto un esempio che forse potrebbe aiutare
If a>b then
c=d+e
else
c=f+g
end if
numero=c
Io volevo fare:
If a>b then
call calcola1
else
call calcola2
end if
numero=c
sub calcola1 ()
c=d+e
end sub
sub calcola2 ()
c=f+g
end sub
Il problema che si pone è che c dentro la sub assume un valore ma appena mentre appena rietornato sul codice master c assume valore "vuoto" |
Filtrare contatti ripetuti entro 30 giorni
di Ghibli (utente non iscritto) data: 26/03/2014 17:51:50
Buonasera.
Ho un foglio di excel (esportato da una tabella di access) di circa 10.000 righe così composto:
CODICEFISCLIENTE DATACONTATTO
ABCEFG01A02A100G 27/01/2013
ABCEFG01A02A100G 11/02/2013
ABCEFG01A02A100G 16/03/2013
ABCEFG01A02A100G 04/04/2013
HILMNP03B04B200F 05/04/2013
HILMNP03B04B200F 12/05/2013
HILMNP03B04B200F 18/06/2013
HILMNP03B04B200F 24/07/2013
Vorrei impostare un filtro o una formula che mi consentisse di vedere quanti contatti dello stesso cliente ci sono stati entro 30 giorni dal precedente riferito alla totalità dei clienti e possibilmente selezionare le righe con tali requisiti.
Nell'esempio: per il primo cliente dovrebbe restiturmi 3 e mostrare la prima, seconda e quarta riga (in quanto il terzo contatto è avvenuto dopo 30 giorni dal secondo), mentre per i secondo cliente dovrebbe restituirmi 2 e mostrare la prima e seconda riga (relativa al secondo cliente).
Attendo fiducioso e saluto tutti.
di Vecchio Frac data: 26/03/2014 17:54:00
@Ghibli
La tua nuova discussione è finita dentro una discussione già aperta da Matbuz.
Ti prego di creare una nuova discussione e riproporre il tuo quesito.
di Vecchio Frac data: 26/03/2014 18:03:12
@Matbuz
Uno dei metodi, semplice, è servirsi di variabili globali.
Una variabile dichiarata entro una certa funzione o una procedura ha visbilità limitata al pezzo di function o sub entro cui è dichiarata; la variabile globale, invece, è quella che si dichiara fuori dalle altre sub (dopo Option Explicit) e ha visibilità all'interno del modulo in cui è dichiarata. Può essere letta e scritta da qualunque sub o function all'interno del proprio modulo (o foglio). Se la dichiari Public e la sistemi in un modulo poi sarà visibile all'intero progetto.
Chiaramente le variabili globali vanno utilizzate con cura e discernimento.
Vedi esempio qui sotto, lanciando "test_variabili_globali".
Option Explicit
'tutto in un modulo
Private nome as string, eta as integer
public sub test_variabili_globali()
call chiedi_nome
call chiedi_eta
msgbox "Adesso so che ti chiami " & nome & " e che hai " & eta & " anni."
end sub
private sub chiedi_nome()
nome = inputbox("Inserisci il tuo nome:")
end sub
private sub chiedi_eta()
eta = inputbox("Inserisci la tua età:")
end sub
|
di scossa data: 26/03/2014 20:39:06
Se il codice che hai mostrato rispecchia l'esigenza reale, direi che la scelta migiore è quella di usare delle function anziché delle sub.
If a>b then
c = calcola(d,e)
else
c = calcola(f, g)
end if
numero=c
function calcola (byVal V1 as variant, byVal V2 as variant)
calcola=V1+V2
end sub
|
di scossa data: 26/03/2014 20:40:26
Errata
function calcola (byVal V1 as variant, byVal V2 as variant)
Corrige
function calcola (byVal V1 as variant, byVal V2 as variant) as variant
function calcola (byVal V1 as variant, byVal V2 as variant) as variant
calcola=V1+V2
end sub |
di scossa data: 26/03/2014 20:41:34
Ovviamente, se conoscessi il tipo di variabili, si potrebbero dichiarare le variabili secondo il tipo corretto.
Vuoi Approfondire?