2011-08-12 12 views
16

Posiadam skoroszyt, który deklaruje zmienną globalną, która ma pomieścić obiekt COM.Jaki jest czas istnienia zmiennej globalnej w programie excel vba?

Global obj As Object 

I initalize go w przypadku Workbook_Open tak:

Set obj = CreateObject("ComObject.ComObject"); 

widzę to stworzył i w tym czasie mogę dokonać pewnych połączeń COM do niego.

Na moim arkuszu mam kilka komórek, które wyglądają jak:

=Module.CallToComObject(....) 

wewnątrz modułu Mam funkcji

Function CallToComObject(...) 
    If obj Is Nothing Then 
     CallToComObject= 0 
    Else 
     Dim result As Double 
     result = obj.GetCalculatedValue(...) 
     CallToComObject= result 
    End If 
End Function 

widzę te działają na trochę, ale po kilka arkuszy odświeża obiekt obj nie jest już inicjowany, tzn. jest ustawiony na Nic.

Czy ktoś może wyjaśnić, czego powinienem szukać, może to spowodować?

+1

Czy masz wiele funkcji wywołujących obiekt COM lub tylko jeden? Jeśli tylko jeden, możesz rozważyć utworzenie zmiennej statycznej w funkcji: funkcja może wtedy sprawdzić, czy jest zainicjalizowana, a jeśli nie, zainicjować ją. –

+1

Czy globalne zmienne nie są złe? Uważam również, że właściwym słowem kluczowym jest "Publiczny", a nie "Globalny". –

Odpowiedz

19

Każda z nich będzie zresetować zmienne globalne:

  1. Używanie "End"
  2. nieobsługiwany Runtime Error code
  3. Montaż
  4. Zamknięcie skoroszyt zawierający projekt VB

To niekoniecznie wyczerpująca lista ...

+0

Gdzie można znaleźć wyczerpującą listę. Zawsze zastanawiałem się, co powstrzymało działanie zmiennych globalnych. Zwłaszcza zmienna do przechwytywania zdarzeń aplikacji. – Jon49

+0

@Tim, Zgaduję, że to nieobsługiwany błąd środowiska wykonawczego, który go powoduje – chollida

+0

@Jon: to wszystko, co mogłem wymyślić. –

6

Proponowałbym piąty punkt oprócz Tima powyżej 4: Przechodzenie przez kod (debugowanie) i zatrzymywanie przed osiągnięciem końca. Prawdopodobnie może to zastąpić punkt 3, ponieważ kod edycji nie wydaje się powodować utraty wartości globalnej zmiennej.

+0

+1 - Właśnie chciałem napisać to samo! :-) –

Powiązane problemy