[SOLVED] Makro „kopiuj” przypisane do formantu nie działa!

Użytkowanie arkusza kalkulacyjnego
A_P
Posty: 38
Rejestracja: pt lis 18, 2016 3:49 pm

[SOLVED] Makro „kopiuj” przypisane do formantu nie działa!

Post autor: A_P »

Witam.
Posiadam formularz w calcu, który wypełniam przy użyciu makra. W formularzu tym, w komórce C17 mam osadzoną listę rozwijaną z nazwiskami.
Zadaniem makra w pierwszym kroku jest: skopiowanie z komórki C17 nazwiska do schowka, następnie przechodzi do Arkusza w drugim pliku, wkleja zawartość schowka do komórki B4 i uruchamia się drugie makro w celu zebrania odpowiednich danych.

Problem polega na tym, że makro pierwsze, uruchomione przyciskiem (formantem) nie ustawia focusa na komórce C17 i nie wykonuje kodu: kopiuj do schowka, natomiast do komórki B4 wstawia ze schowka coś co było kopiowane wcześniej i dzieją się straszności!

To samo makro uruchomione z Menu Narzędzia → Makra → Uruchom makro – działa!, działa również poprzez przypisany skrót z klawiatury.
Czy jest na to sposób? A może problem ten nadaje się do zgłoszenia?

Załączam przykład.
(Przepraszam za wypracowanie) :D
Załączniki
Kopiuj.ods
(11.29 KiB) Pobrany 145 razy
Ostatnio zmieniony czw sty 31, 2019 11:22 pm przez A_P, łącznie zmieniany 1 raz.
LinuxMint 18, Windows 7, LibreOffice (6.0.7)-64bit
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Makro „kopiuj” przypisane do formantu nie działa!

Post autor: Jermor »

Makro nagrałeś funkcją nagrywania makr. OK. Ale aby się wykonało musisz w przycisku przypisać je do "Naciśnięto przycisk myszy" a nie "Wykonaj akcję".
Przy okazji. Powinieneś zmodyfikować swoje makro. Zawiera ono operację Copy. Zostaje więc skopiowana zawartość komórki ze wszystkimi jej właściwościami, czyli kopia jest także komórką z opcja sprawdzania poprawności danych. Można otworzyć w niej listę rozwijaną i zobaczyć wszystkie nazwiska (w załączonym przykładzie wstawiasz kopie do tego samego arkusza, do komórki C5). Ostatnią rejestrowaną przez ciebie czynnością powinno być CTRL+SHIFT+C, czyli wklej specjalnie z wybranym sposobem wstawiania.
Warto też podczas rejestrowania nie odwoływać się do adresu ale do nazwy komórki. Kiedy zreorganizujesz arkusz i przeniesiesz tę komórkę w inne miejsce makro przestanie działać. Zatem nadaj komórce C17 nazwę np. "osoba". Aby podczas nagrywania makra przejść do tej komórki wskaż ją, wybierając z listy nazw dostępnych po rozwinięciu "Obszaru arkusza". To jest to małe okienko w lewym górnym rogu, w którym zazwyczaj widać aktualny adres komórki. Jeśli w arkuszu są zdefiniowane jakieś nazwy, to rozwijając listę można od razu przejść do wybranego zakresu.
AOO 4.1.15, LO 24.8.2 (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.
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Makro „kopiuj” przypisane do formantu nie działa!

Post autor: belstar »

Jermor pisze:Ale aby się wykonało musisz w przycisku przypisać je do "Naciśnięto przycisk myszy" a nie "Wykonaj akcję".
Tu się nie zgodzę, aby to udowodnić wstaw sobie nowy przycisk i podepnij pod niego("Wykonaj akcję") jakieś inne makro, chociażby:

Kod: Zaznacz cały

Sub test()
	Print "YES"
End Sub
Tak więc top nie jest przyczyną braku reakcji, a co jest, nie wiem.
Druga cześć twojej wypowiedzi -100% trafna.

Do autora wątku: rozważ napisanie makra w profesjonalny sposób. Zacznij od lektury https://wiki.openoffice.org/wiki/Docume ... ASIC_Guide
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Makro „kopiuj” przypisane do formantu nie działa!

Post autor: Jermor »

belstar ma rację. A tyle lat o tym nie wiedziałem !!!
Jednak gdy przypisałem makro do "Naciśnięto..." to zadziałało, chociaż z tym felernym kopiowaniem.
Gdy nagrałem to makro samodzielnie i dodałem do niego twój Print, to podpięte pod "Wykonaj akcję" realizuje Print ale nie realizuje prawidłowo reszty.
AOO 4.1.15, LO 24.8.2 (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.
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Makro „kopiuj” przypisane do formantu nie działa!

Post autor: belstar »

Podejrzewam że chodzi o bezwładność systemu, wstawienie spowolniej może pomóc, ale to nie jest dobry pomysł. Złem pomysłem jest też wykorzystanie schowka do tak prostego zadania. Poniżej kod jak to powinno być zrealizowane.

Kod: Zaznacz cały

Sub test()
	Dim Doc As Object
	Dim Sheet As Object
	Dim SourceCell As Object
	Dim TargetCell As Object   
 
	Doc = ThisComponent
	Sheet = Doc.Sheets.getByName("Arkusz2")
 
	SourceCell = Sheet.getCellRangeByName("C17")
	TargetCell = Sheet.getCellRangeByName("B4")
	
	TargetCell.String = SourceCell.String
End Sub
LibreOffice 5.1.2.2 Ubuntu 16 LTS
A_P
Posty: 38
Rejestracja: pt lis 18, 2016 3:49 pm

Re: Makro „kopiuj” przypisane do formantu nie działa!

Post autor: A_P »

Dzięki Panowie za zainteresowanie i szybką reakcję.

Ten formularz, którego używam pamięta jeszcze wersję 3.xx i wówczas nie było problemów.
Używane makro porusza się pomiędzy dwoma otwartymi plikami.

Tak do kopiowania C17 i wstawiania jego zawartości w obrębie tego samego arkusza nie jest potrzebny schowek.
Niechlujnie nagrane makro w przykładzie miało pokazać problem braku reakcji na naciśnięcie „Przycisku”. Spowolnienia też nie pomagały!

Próbowałem kodów według A. Pitonyaka z takim samym skutkiem jak z tym nagranym.
Wszystkie kody odwołujące się do adresów bez listy rozwijanej wstawiały focus do komórki i działały a z listą nie.

Próbowałem przypisywać makro do wielu wydarzeń formantu, ale do „Naciśnięto przycisk myszy” nie doszedłem.
Faktycznie zadziałało!

Za wszystkie wskazówki i rozwiązanie problemu Bardzo Wam dziękuję i pozdrawiam. :bravo:
LinuxMint 18, Windows 7, LibreOffice (6.0.7)-64bit
ODPOWIEDZ