Uczę się Excel VBA przez ostatnie dwa lata i mam pomysł, że czasami właściwe jest pozbywanie się zmiennych na końcu segmentu kodu. Na przykład, widziałem to zrobić w tym kawałku adaptacją Ron de Bruin's code for transferring Excel to HTML:Kiedy zmienna VBA programu Excel powinna zostać zabita lub ustawiona na Nothing?
Function SaveContentToHTML (Rng as Range)
Dim FileForHTMLStorage As Object
Dim TextStreamOfHTML As Object
Dim TemporaryFileLocation As String
Dim TemporaryWorkbook As Workbook
...
TemporaryWorkbook.Close savechanges:=False
Kill TemporaryFileLocation
Set TextStreamOfHTML = Nothing
Set FileForHTMLStorage = Nothing
Set TemporaryWorkbook = Nothing
End Function
zrobiłem kilka poszukiwania na ten temat i okazało się bardzo niewiele poza, jak to zrobić, w jednym poście a statement that no local variables need to be cleared forum, gdyż przestaje istnieć pod adresem End Sub
. Zgaduję, opierając się na powyższym kodzie, który może nie być prawdziwy w End Function
lub w innych okolicznościach, z którymi się nie spotkałem.
Więc moje pytanie sprowadza się do tego:
- Czy jest gdzieś w sieci, która wyjaśnia, kiedy i dlaczego do zmiennej porządki, a ja po prostu nie znalazłem?
A jeśli nie może ktoś tutaj proszę wyjaśnić ...
- Kiedy jest zmienna porządki Excel VBA konieczne, a kiedy nie?
- A dokładniej ... Czy istnieją określone zmienne zastosowania (zmienne publiczne? Zmienne zdefiniowane w funkcjach?), Które pozostają załadowane w pamięci dłużej niż przez niż podrzędne, a zatem mogą powodować problemy, jeśli nie będę czyścić po mnie?
Dzięki GSerg, wyjaśnienie to jest jasne i zwięzłe i daje mi dużo lepszy zmysł do zarządzania zmiennego. Jedno dodatkowe pytanie: mówisz "poziom dostępu do zmiennej nie ma wpływu na jej żywotność". Czy wiesz, czy to życie jest ograniczone, gdy wartość jest ustawiona po raz pierwszy przez aktywny kod (start) i kiedy kod, który kod osiąga znacznik 'End' (koniec)? Czy kończy się, gdy projekt się resetuje? Próbowałem przetestować tę teorię, ustawiając wartość zmiennej publicznej, która została przyciemniona w innym module, ale zmienna nigdy nie pojawiła się w oknie locals, więc nie mogłem zaobserwować kiedy spadła. –
@KarlRookey Public vs private różni się od poziomu klasy w porównaniu z poziomem procedury. Kontakty publiczne i prywatne nie wpływają na czas życia. Poziom klasy oznacza, że zmienna żyje tak długo, jak żyje klasa. Poziom modułu oznacza zmienną, o ile projekt nie jest resetowany. Zauważ, że "życie" i "zawiera coś" nie są synonimami. Zmienna może żyć i zawierać "Nic". – GSerg