[VBA] - problem z funkcją GETVARIABLE


Michał J

Rekomendowane odpowiedzi

Witam

Problem polega na tym że funkcja działa prawidłowo tylko wtedy gdy rysunek otworze przez uruchomionego ZwCada, natomiast gdy otwieram przez plik z z rysunkiem i otwiera się Zwcad to ta funkcja niedziała i muszę ręcznie przeładować makro żeby to zatrybiło.

Pytanie czy to tak już poprostu jest , czy da się to jakoś obejść bo np. brakuje mi czegoś w kodzie (poniżej)

Sub Skala_Rysunku()

Dim SKALA As Double
Dim OBECNA As Integer
Dim NOWA As String

   OBECNA = Thisdocument.GetVariable("useri1")  ' w tym miejscu wywala kod jeżeli rysunek był uruchamiany z pliku
   Thisdocument.Utility.prompt vbCrLf & "Aktualna skala: " & "<" & "1:" & OBECNA & ">"

START:
   Thisdocument.Utility.InitializeUserInput 1, ""

   SKALA = Thisdocument.Utility.GetInteger(vbCrLf & "PODAJ SKALĘ:  ")

       If Not SKALA > 0 Then
          Thisdocument.Utility.prompt vbCr & "!!!!  Skala musi być >0  !!!!"
          GoTo START
       Else
           NOWA = "useri1"
           Thisdocument.SetVariable NOWA, SKALA
           OBECNA = Thisdocument.GetVariable("useri1")
           Thisdocument.Utility.prompt vbCrLf & "Zmieniono skalę na: " & "<" & "1:" & OBECNA & ">"
       End If

End Sub

pozdrawiam

M.J

Odnośnik do komentarza
Udostępnij na innych stronach

Witam

Sprawdziłem Pana kod, i wygląda że jest poprawny.

Pierwsze co sie nasuwa, co może powodowac problem, to użycie zmiennej USERI1 gdzieś wcześniej w kodzie i zapisanie tam wartości o innym typie danych niż zadeklarowana zmienna OBECNA.

Proszę spróbować nie deklarować typu tej zmiennej, co będzie w zmiennej systemowej to zwróci i dalej można to interpretować.

Innym rozwiązaniem może być przypisanie objąć obsługą błędu

On Error Resume Next
OBECNA = Thisdocument.GetVariable("useri1") 
On Error GoTO 0

A dalej sprawdzić zmienną Err, może tam będzie jakieś wyjaśnienie.

Ta procedura jest częścią jakiejś większej nakładki? jak jest wczytywany plik i wywoływana funkcja? ręcznie? czy przez LISP?

Odnośnik do komentarza
Udostępnij na innych stronach

Witam

Procedura jest częścią większej nakładki która będzie wykorzystywać dane zapamiętane w rysunku w zmiennych useri1-5 i userr1-5. Przydatne to będzie w sytuacji gdy z rysunku będą korzystać inne osoby i będą mogły przejąć ustawienia z rysunku (np. skala, jednostka rysowania, jednostka wymiarowania). Procedura jest wywoływana za pomocą kodu "Disel" wpisanego do przycisku na pasku narzędziowym:

^C^C-vbarun A_USTAWIENIA.Skala_Rysunku

Zmienna useri1 nie jest nigdzie wcześniej używana i żadna procedura nie zapisuje do niej danych, są to początkowe ustawienia przed dalszym używaniem nakładki, domyślnie w pliku ustawiona jest na 0 i odpalając rysunek przez plik makro powinno zwrócić wartość 0, a jeżeli były wcześniej wprowadzone dane to też powinno je zwrócić. Zwraca zapamiętaną wartość dopiero jak plik otworze odpalając Zwcada i potem Plik\Otwórz...

Zmienna useri1-5 jest typu integer czyli liczby całkowite i innych danych niemożna do niej wprowadzić.

Jak odpale rysunek przez Zwcada (makro działa) i odpale następny rysunek ale przez klik na pliku to też działa, więc wydaje mi się że to ma związek ze zmiennymi systemowymi. Może jest jakaś zmienna systemowa (o której ja niewiem) która rozpoznaje w jaki sposób została otwarta sesja ZwCada ?? i ta zmienna miesza.

Stosując zaproponowany kod

On Error Resume Next
OBECNA = Thisdocument.GetVariable("useri1")
On Error GoTO 0

to przeskakuje dalej ale wykrzacza się wtedy na następnej linii kodu i daje komunikat -> patrz. załącznik

Funkcji Err nie mam jeszcze opanowanej :( - proszę o jakieś rozwiązanie z jej wykorzystaniem które rozwiąże mój problem.

Jeżeli nie będzie można z tym nic zrobić to będę musiał dać uwagę do nakładki że pliki należy odpalać przez Plik\Otwórz a chciałbym uniknąć tej niedogodności.

pozdrawiam

Michał J

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.