Ignazio
2004-11-17 09:01:11 UTC
Ciao a tutti,
credevo di aver compreso il meccanismo che regola la "vita utile" delle
variabili fino quando mi è successa una cosa "strana": l'esecuzione di una
UserForm mi ha cancellato il contenuto di una variabile definita in un
modulo standard a livello di modulo.
Per riuscire a capirci qualcosa ho eseguito i seguenti test.
Nel Modulo1 ho inserito le seguenti istruzioni:
----
Dim Num As Integer
Sub IncrementaNum1()
Num = Num + 1
Range("A1") = Num
End Sub
----
Se ora lancio ripetutamente la routine IncrementaNum1 vedo nella cella A1
incrementarsi di una unità il valore corrente (e fin qui tutto ok).
Ho quindi creato una UserForm1 (priva di controlli e codice) e ho aggiunto
nel Modulo1 la seguente routine:
----
Sub IncrementaNum2()
Num = Num + 1
UserForm1.Show
Range("A1") = Num
End Sub
----
Se ora lancio ripetutamente la routine IncrementaNum2 e chiudo la UserForm1
vedo ancora nella cella A1 incrementarsi di una unità il valore corrente (e
fin qui ancora tutto ok).
Infine ho inserito nella UserForm1 una etichetta (Label1) e il seguente
codice:
----
Private Sub UserForm_Click()
Label1.Caption = 1
End Sub
----
Se ora lancio ripetutamente la routine IncrementaNum2 e chiudo la UserForm1
vedo nella cella A1 sempre 1!
E' normale questo?
Inoltre succede un'altra cosa altrettanto strana.
Se ora lancio per 3 volte la macro IncrementaNum1 nella cella A1 vedo
comparire il numero 3.
Se poi provo a lanciare 2 volte la macro IncrementaNum2, la prima volta
nella cella A1 mi compare 4, la seconda volta 1!
Qualcuno sa spiegarmi il perchè di tutto questo?
Come mai il contenuto della variabile Num viene cancellato quando eseguo la
routine IncrementaNum2?
credevo di aver compreso il meccanismo che regola la "vita utile" delle
variabili fino quando mi è successa una cosa "strana": l'esecuzione di una
UserForm mi ha cancellato il contenuto di una variabile definita in un
modulo standard a livello di modulo.
Per riuscire a capirci qualcosa ho eseguito i seguenti test.
Nel Modulo1 ho inserito le seguenti istruzioni:
----
Dim Num As Integer
Sub IncrementaNum1()
Num = Num + 1
Range("A1") = Num
End Sub
----
Se ora lancio ripetutamente la routine IncrementaNum1 vedo nella cella A1
incrementarsi di una unità il valore corrente (e fin qui tutto ok).
Ho quindi creato una UserForm1 (priva di controlli e codice) e ho aggiunto
nel Modulo1 la seguente routine:
----
Sub IncrementaNum2()
Num = Num + 1
UserForm1.Show
Range("A1") = Num
End Sub
----
Se ora lancio ripetutamente la routine IncrementaNum2 e chiudo la UserForm1
vedo ancora nella cella A1 incrementarsi di una unità il valore corrente (e
fin qui ancora tutto ok).
Infine ho inserito nella UserForm1 una etichetta (Label1) e il seguente
codice:
----
Private Sub UserForm_Click()
Label1.Caption = 1
End Sub
----
Se ora lancio ripetutamente la routine IncrementaNum2 e chiudo la UserForm1
vedo nella cella A1 sempre 1!
E' normale questo?
Inoltre succede un'altra cosa altrettanto strana.
Se ora lancio per 3 volte la macro IncrementaNum1 nella cella A1 vedo
comparire il numero 3.
Se poi provo a lanciare 2 volte la macro IncrementaNum2, la prima volta
nella cella A1 mi compare 4, la seconda volta 1!
Qualcuno sa spiegarmi il perchè di tutto questo?
Come mai il contenuto della variabile Num viene cancellato quando eseguo la
routine IncrementaNum2?
--
Ciao
Ignazio
Ciao
Ignazio