Strona 1 z 1

[SOLVED]Dlaczego makro z paska ma parametr?

: ndz cze 21, 2020 6:30 pm
autor: antekg
Logicznym byłoby, gdyby makro podłączone pod przycisk na pasku narzędzi nie było wywoływane z parametrami.
Nie jest wywoływane z parametrami, gdy makro podłączymy pod pozycję (wpis) menu i to jest OK.
Oto kod do tego eksperymentu:

Kod: Zaznacz cały

Sub Sprwdz (Optional NoMsg)
  if IsMissing(NoMsg) then
    MsgBox "Missing"
  else
    MsgBox NoMsg
  end if
End Sub
Zwykłe uruchomienie tego kodu daje komunikat "Missing". Wywołanie z pozycji menu również daje taki komunikat.
Uruchomienie przyciskiem z paska narzędzi daje komunikat "0", czyli parametr w wywołaniu istnieje i jest równy 0.
Jest to brak konsekwencji i dość zaskakujące. Czy jest to celowe?
Moim zdaniem jest to drobna pluskwa. Jak to zgłosić do dalszej dyskusji?

Re: Dlaczego makro z paska ma parametr?

: ndz lis 01, 2020 10:28 pm
autor: Jermor
Dopiero teraz przeczytałem twój post.
Wg. mnie wszystko funkcjonuje prawidłowo.
Sądzę, że twoim celem jest utworzenie takiego makra, które może być podpięte pod przycisk i równocześnie wykorzystywane w kodowaniu programu.
Jeżeli makro zostanie przypisane np. do kliknięcia przycisku, to pierwszy parametr takiego makra otrzymuje typ zmiennej com.sun.star.awt.MouseEvent wtedy gdy nie określono tego typu lub podano typ Object. Gdy podano inny typ tego pierwszego argumentu, pojawi się błąd o niezgodności typu dla tego parametru.
Przy wywoływaniu makra pośrednio (z innego makra) lub poprzez wymuszenie jego wykonania z menu "Narzędzia" ten parametr otrzymuje typ Variant i generuje błąd 448 (nie odnaleziono nazwanego argumentu).
Aby osiągnąć takie uniwersalne rozwiązanie trzeba "poświęcić " pierwszy argument, gdyż musi on obsłużyć zdarzenie uruchamiające makro. Właściwy parametr (właściwe parametry) muszą wystąpić jako następne. Jednak wówczas "zwykłe" wywołanie takiego kodu wymaga opuszczenia pierwszego parametru, sygnalizując to samym przecinkiem.