Strona 1 z 1

Jak zarejestrować proste makro?

: pn maja 17, 2021 2:40 pm
autor: Maciejo
Witam

Jak w LibreOffice Calc zarejestrować proste makro uruchamiane skrótem klawiszowym?

W Excal 2016 robię to następująco.
"Widok > Makra > Zarejestruj Makro ..."
Wpisuję nazwę, ustawiam skrót klawiszowy, klikam OK.
Wykonuję czynność. Zatrzymuję rejestrację.
Mam proste makro:

Kod: Zaznacz cały

Sub tekst()
 ActiveCell.FormulaR1C1 = "Tekst"
End Sub
Po otworzeniu tego pliku w LibreOffice Calc, makro jest w nazwapliku.xls > VBAProject > Moduły > Module1 > tekst

Nie działa skrót klawiszowy. Nie jest to problem.
Wybieram "Narzędzia > Dostosuj ..."
Znajduję moje makro (tutaj funkcję).
Przy aktywnym bloku "Skróty klawiszowe" klikam konkretny skrót, a następnie modyfikuj.
Już działa.

Pytanie, jak takie proste makro zarejestrować w LibreOffice Calc?

Gdy wybieram "Narzędzia > Makra > Zarejestruj makro",
to tworzy się makro z kilkunastu linii, jak w załączonym pliku, ale działa tak, że wstawia tekst zawsze w tej samej komórce, czyli działa inaczej jak proste makro z Excela.

Jak stworzyć za pomocą kreatora w LIbreOffice Calc tak samo proste makro jak w Excelu, żeby było czytelne i nie miało tylu linii, skoro to z Excela działa i jest mniejsze?

Pozdrawiam

Re: Jak zarejestrować proste makro?

: pn maja 17, 2021 3:34 pm
autor: Jermor
O nagrywaniu makr możesz poczytać np. tu: https://yestok.pl/lbo/y60.php.
W twoim przypadku: podczas nagrywania makra nie nagrywaj zdarzenia wskazania komórki docelowej. Po prostu nagraj wpisanie tekstu.
Po pojawieniu się okienka "Zarejestruj makro" najpierw uaktywnij ponownie okno programu Calc, nie poprzez wskazanie komórki, bo wówczas ten fakt zostanie zarejestrowany, ale poprzez kliknięcie paska tytułowego w oknie programu Calc.
W twoim przykładzie możesz także usunąć następujące linie wytworzonego makra.
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$F$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
Pozostały fragment twojego kodu wstawi tekst do aktualnie aktywnej komórki.

Ponadto jeśli masz już takie proste makro napisane w VBA Excela, to możesz je wstawić do arkusza Calc, jednak pierwszą instrukcją w module, który takie makro zawiera, musi być: Option VBASupport 1
Z zastrzeżeniem, że nie wszystkie makra VBA zostaną prawidłowo wykonane. Więcej o tym jest w systemie pomocy.

Re: Jak zarejestrować proste makro?

: pn maja 17, 2021 3:55 pm
autor: Maciejo
Bardzo dziękuję.
Rzeczywiście ta procedura działa.
Po wpisaniu tekstu trzeba jeszcze Enter wcisnąć, bo inaczej się nic nie zarejestruje.

Jednak i tak jest 9 linii kodu zamiast jednej, a to makro z Excela działa w LibreOffice z jedną linią.
Nie trzeba do tego było wpisywać Option VBASupport 1.

Zadałem pytanie na podstawie prostego makra, ale zamierzam nagrywać bardziej złożone i modyfikować je.
Dlatego chciałbym aby były proste bez zbędnych linii kodu.

Re: Jak zarejestrować proste makro?

: pn maja 17, 2021 8:53 pm
autor: Jermor
Brak konieczności wpisania Option VBASupport wynika z zaznaczenia opcji "Kod wykonywalny" w opcjach pakietu.
Zrzut ekranu 2021-05-17 203956.png
Wtedy podczas ładowania excelowego pliku zawierającego makro LibreOffice automatycznie dodaje tę instrukcję.
After loading the VBA code, LibreOffice inserts the statement Option VBASupport 1 in every Basic module to enable a limited support for VBA statements, functions and objects. See Option VBASupport Statement for more information.
I dzieje się to wówczas gdy ładowany jest dokument Microsoft Office.
Jeśli chcemy kod VBA umieścić w module biblioteki LibreOffice taką instrukcję musimy wpisać samodzielnie.

Re: Jak zarejestrować proste makro?

: wt maja 25, 2021 7:21 pm
autor: Maciejo
Dziękuję bardzo za dokładne wyjaśnienie.