Jak zarejestrować proste makro?

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
Maciejo
Posty: 17
Rejestracja: pn maja 17, 2021 2:23 pm

Jak zarejestrować proste makro?

Post 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
Załączniki
testowemakro.txt
(1.06 KiB) Pobrany 162 razy
LibreOffice 6.4.6.2 (x64) Windows 10
Awatar użytkownika
Jermor
Posty: 2239
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Jak zarejestrować proste makro?

Post 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.
Ostatnio zmieniony pn maja 17, 2021 3:46 pm przez Jermor, łącznie zmieniany 1 raz.
Powód: Dodałem informacje o uruchomieniu makra VBA
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Maciejo
Posty: 17
Rejestracja: pn maja 17, 2021 2:23 pm

Re: Jak zarejestrować proste makro?

Post 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.
LibreOffice 6.4.6.2 (x64) Windows 10
Awatar użytkownika
Jermor
Posty: 2239
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Jak zarejestrować proste makro?

Post 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.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Maciejo
Posty: 17
Rejestracja: pn maja 17, 2021 2:23 pm

Re: Jak zarejestrować proste makro?

Post autor: Maciejo »

Dziękuję bardzo za dokładne wyjaśnienie.
LibreOffice 6.4.6.2 (x64) Windows 10
ODPOWIEDZ