Witam Wszystkich bardzo serdecznie.
Mam pytanie.
Czy znajdę gdzieś na forum temat w którym poruszono kwestię uruchamiania makra otwierającego okno do wprowadzenia danych?
Mam taki projekt, w którym notorycznie moi współpracownicy nie uzupełniają pola miesiąc i rok.
Na ten moment poradziłem sobie tak, że biją po oczach te dwa pola... okazuje się, że tylko mnie biją
Żadna forma motywacji nie pomaga!!!
Zostaliście moją ostatnią deską ratunku
Myślę, że rozwiązanie, gdy ktoś otowrzy dokument i z rozwijanej listy będzie musiał wybrać miesiąc i rok rozwiąże moj problem i utrze nosa moim niesfornym współpracownikom
Przechwytywanie.PNG (8.11 KiB) Przejrzano 7606 razy
Innym sposobem może być zastosowanie Poprawności danych z menu Dane - nie pozwolić na wprowadzenie istotnych danych dopóki te mmniej ważne nie zostaną wprowadzone.
Zostawiam plik z zastosowaną metodą, spróbuj wpisać dane do żółtych komórek
Ostatnio zmieniony śr gru 09, 2020 10:59 pm przez Rafkus, łącznie zmieniany 1 raz.
Powód:Usunięcie pliku, poniżej poprawiona wersja
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10 OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
I kolejne rozwiązanie:
Przypisz poniższe makro do zdarzenia Zapisz Dokument w twoim pliku. Wówczas podczas zapisywania pliku uruchomi się to makro i sprawdzi czy do komórek B2 i C2 w Arkuszu1 zostały wprowadzone jakieś dane. Jeśli nie to zostaje wywołane okienko do wprowadzenia danych i nie pozwolą na zamknięcie dopóki nie poda się poprawnych wartości.
Sub dane
Dim Arkusz As Variant
Dim komorka1,komorka2 As Variant
dim i as integer
Arkusz = ThisComponent.Sheets("Arkusz1")
komorka1 = Arkusz.getCellRangeByName("B2")
komorka2 = Arkusz.getCellRangeByName("C2")
if komorka1.string="" then
Do
i = inputBox ( "Podaj numer miesiąca: liczbę z przedziału 1÷12" , "UWAGA", Month(Date))
'Month(Date) - zwraca numer aktualnego miesiąca, w powyższej instrukcji będzie to wartość domyślna.
Loop until i>0 and i<13
komorka1.value=i
endif
if komorka2.value=0 then
Do
i = inputBox ( "Podaj Rok z przedziału 2000÷2030" , "UWAGA", Year(Date) )
'Year(Date) - zwraca aktualny rok, w powyższej instrukcji będzie to wartość domyślna.
Loop until i>2000 and i<2030
komorka2.value=i
endif
End Sub
Oczywiście podaj swoje dane: nazwę arkusza i komórki docelowe.
PS. A jeśli wystarczy tylko uzupełnić dane domyślne (do pewnych komórek wpisać tylko bieżący miesiąc i rok) to wystarczy takie makro:
Sub dane2
Dim Arkusz As Variant
Dim komorka1,komorka2 As Variant
dim i as integer
Arkusz = ThisComponent.Sheets("Arkusz1")
komorka1 = Arkusz.getCellRangeByName("B2")
komorka2 = Arkusz.getCellRangeByName("C2")
if komorka1.string="" then komorka1.value = Month(Date)
if komorka2.string="" then komorka2.value = Year(Date)
End Sub
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10 OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Sądzę, że właściwsza jest pierwsza propozycja @Rafkus i to bez podawania domyślnej podpowiedzi.
michal.s pisze:...notorycznie moi współpracownicy nie uzupełniają pola miesiąc i rok.
Charakter przedstawionej ilustracji, świadczy o tym, że tabela jest raczej wypełniana danymi z innego niż bieżącego miesiąca. Przy takim podejściu współpracowników, i zaproponowaniu danych domyślnych, nacisną po prostu OK i zatwierdzą niepoprawne dane.
Podpiął bym to makro pod akcję "Uruchom aplikację""Otwórz dokument", czyli aby nie pozwalało niczego wprowadzać dopóty, dopóki nie zostanie wprowadzona właściwa data.
Dlaczego tak? Bo ludzie pod koniec pracy, myślą już o innych sprawach i są mniej skoncentrowani. Mogą zatem popełnić błędy a dane, o które chodzi @michal.s, są kluczowe dla zestawienia.
Ostatnio zmieniony wt gru 08, 2020 2:30 pm przez Jermor, łącznie zmieniany 1 raz.
Powód:Pomyliłem akcję, która należy wybrać.
AOO 4.1.16 (tylko Win 10), LO 25.8 (x64) na: Win 11, 10, Linux (Mint) Ważne!
Jeśli twój problem został rozwiązany, edytuj swój pierwszy post, dopisując w temacie [SOLVED].
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Dziękuję Rafkus bardzo cenne informacje.
Twoja wersja kody z opcją uruchamiania przy zapisie wydaje mi się bardzo dobra i myślałem, że już temat zamkniemy, ale...
No właśnie...
Rafkus pisze:Przypisz poniższe makro do zdarzenia Zapisz Dokument w twoim pliku.
Próbowałem tego na różne sposoby i poległem
Jak przypisać makro do zdarzenia?
Próbowałem w ten sposób, ale nie ma do wyboru makra, które jest w pliku.
Makro działa bez żadnego problemu przy wywołaniu go bezpośrednio z okna 'wykonaj makro'
Nie spotkałem się z takim problemem, więc ciężko mi coś doradzić. Zazwyczaj makro przypisuję tak jak pokazałeś to na dołączonym obrazie, więc jestem zdziwiony że w oknie dialogowym Wybór makra w Bibliotece nie ma widocznego jeszcze twojego pliku.
A czy naprawdę używasz jeszcze OpenOffice 3.3??
Używasz Apache OpenOffice. Warto zastanowić się nad zmianą i migracją do LibreOffice.
Może nawet nie dlatego, że Libre jest lepszy (bo jest) ale dlatego, że pracuje nad nim większy zespół i szybciej pojawiają się łatki.
@Jan_J z lekka ironią napisał o nowej wersji Apache, w której do Calca wprowadzono 4 modyfikacje, po roku stagnacji.
Ale do rzeczy. Coś jest schrzanione w Apache. U mnie także nie pojawiają się kontenery biblioteki w plikach, w sytuacji jaką opisałeś.
Możesz jednak przypisać makro wybierając polecenie "Narzędzia -> Dostosuj -> zakładka Zdarzenia".
AOO 4.1.16 (tylko Win 10), LO 25.8 (x64) na: Win 11, 10, Linux (Mint) Ważne!
Jeśli twój problem został rozwiązany, edytuj swój pierwszy post, dopisując w temacie [SOLVED].
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.