mam zapytke troche z natury teoretycznych...
Otoz mam dosc skomplikowany kod w VBA, a poniewaz uzywam sporej ilosci
modulow, przekazuje sobie dane za pomoca zmiennych globalnych... wiekszosc z
nich to parametry ustawiane na samym poczatku, zaraz po uruchomieniu arkusza
(i TYLKO raz, dokladnie w tym miejscu). Niestety podczas wykonywania makr
zdarza sie, ze wartosci zmiennych globalnych po prostu sie traca...
Najczestszym przypadkiem jest, jak excel napotka na wyjatek, ktorego nie
obsluzylem - wtedy po wejsciu do debugera, albo od razu po nacisnieciu
przycisku "End" zmienne globalne zostaja puste... Ale nie jest to jedyny
moment, pozostale sa dla mnie niezrozumiale i nie widze wyraznej przyczyny..
W kazdym razie nie jest to "on error"...
Czy ma ktos do tego jakas teorie, kiedy zmienne globalne zostaja
zainicjalizowane od nowa? Ew. jak sie przed tym bronic?
Pozdrawiam
Michal
Jeszcze jedna wazna informacja:
sam arkusz nie ma zmiennych globalnych tylko poprzez referencje otwiera
dodatek XLA, w ktorym znajduje sie znakomita wiekszosc kodu, w tym definicja
wszystkich zmiennych globalnych.
Pozdrawiam
Michal
>> Czy ma ktos do tego jakas teorie, kiedy zmienne globalne zostaja
>> zainicjalizowane od nowa? Ew. jak sie przed tym bronic?
>
Najlepsza obrona to obsluzyc wszystkie bledy
ale rozumie w excelu trudno przewidziec jaki ruch
wykona uzytkownik
Przychodza mi na mysl takie rozwiazania
1 Napisac funkcje sprawdzajaca zmienne
i przed pobraniem wartosci zmiennej sprawdzac czy zmienne sa zainicjowane
jak nie sa to ja ponownie zainicjowac
2 Skoro to excel to zamiast do zmiennych
wartosci zapisac w arkuszu dodatku i odwolywac sie bezposrednio do nich
np
zmienna1=ThisWorkbook.Sheets(1).Cells(1, 1)
sam to czesto stosuje
cos na wzor plikow .ini
Janusz
Tylko problem w tym, ze to nie jest jedyny powod utraty zmiennych...
>
> Przychodza mi na mysl takie rozwiazania
>
> 1 Napisac funkcje sprawdzajaca zmienne
> i przed pobraniem wartosci zmiennej sprawdzac czy zmienne sa zainicjowane
> jak nie sa to ja ponownie zainicjowac
Tak tez robie... tylko chodzi mi o zrozumienie mechanizmow utraty danych...
> 2 Skoro to excel to zamiast do zmiennych
> wartosci zapisac w arkuszu dodatku i odwolywac sie bezposrednio do nich
> np
> zmienna1=ThisWorkbook.Sheets(1).Cells(1, 1)
> sam to czesto stosuje
> cos na wzor plikow .ini
staram sie trzymac informacje w bazie danych, troche tez trzymam w
arkuszach...
generalnie nie mam problemu z zapisaniem czy odzyskaniem bledu.. tylko
troche mnie drazni taka sytuacja...
Pozdrawiam
Michal
w momencie zatrzymania programu END-em w debuggerze zmienne sďż˝ kasowane
jak wykonasz kod od jakiegoďż˝ miejsca z z defaultu inicjalizowane jako
puste jak to tekst albo 0 jak to liczby, jak obiekty to na nothing
>>
>> Przychodza mi na mysl takie rozwiazania
>>
>> 1 Napisac funkcje sprawdzajaca zmienne
>> i przed pobraniem wartosci zmiennej sprawdzac czy zmienne sa
>> zainicjowane
>> jak nie sa to ja ponownie zainicjowac
>
> Tak tez robie... tylko chodzi mi o zrozumienie mechanizmow utraty danych...
>
>> 2 Skoro to excel to zamiast do zmiennych
>> wartosci zapisac w arkuszu dodatku i odwolywac sie bezposrednio do nich
>> np
>> zmienna1=ThisWorkbook.Sheets(1).Cells(1, 1)
>> sam to czesto stosuje
>> cos na wzor plikow .ini
>
> staram sie trzymac informacje w bazie danych, troche tez trzymam w
> arkuszach...
baza danych to nie arkusz :)
> generalnie nie mam problemu z zapisaniem czy odzyskaniem bledu.. tylko
> troche mnie drazni taka sytuacja...
pisz programy tak aby unikn�� takich sytuacji ;)
ale tak na serio taka uroda VBA