auto uzupełnianie danych + wysyłka @

Użytkowanie arkusza kalkulacyjnego
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Witajcie,
Tworzę "przypominajkę zaległych terminów" (załącznik). I nie mogę sobie poradzić z opcją autouzupełniania kilku pól po wybraniu "klienta" z listy. Czyli adres @ i nr telefonu. Baza danych jest w oddzielnej zakładce.
Przydałaby się jeszcze opcja, aby po wciśnięciu adresu @ (jest to jedna z pozycji autouzupełniania) wysyłania @ do klienta przypominającego o zbliżającym się terminie końca ważności certyfikacji/wzorcowania danego przedmiotu (dane z komórek) (tu pewnie makra będą)
Dodatkowo, obrazowo chciałbym aby było kilka flag (na razie działają testowo tylko 2 kolory) które zmieniaja sie w zależności od ilosci dni. Ostatecznie ma być:
jeśli termin minął flaga bardowa (termin ustawiony w komórce na 31 dni)
jeśli jest poniżej lub równo 14 dni flaga czerwona
jeśli jest powyżej 14 dni i poniżej lub równo 31 dni do końca to flaga pomarańczowa
jeśli jest powyżej 31 dni i poniżej lub równo 62 dni do końca to żółta
jeśli jest powyżej 62 dni to flaga zielona

Poprosze o podpowiedzi jak to zrobić. Dziekuję za wszelka pomoc.
Załączniki
przypominajka o końcu terminu certyfikacji wzorcowania - testowa.ods
(61.81 KiB) Pobrany 13 razy
Windows 10
LibreOffice 25.2.0.3.
Jan_J
Posty: 4617
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jan_J »

Ad uzupełnianie: funkcja wyszukująca czyli vlookup (wyszukaj.pionowo) albo para funkcji match / index (podaj.pozycję / indeks). Patrz załącznik
przypominajka o końcu terminu certyfikacji wzorcowania - testowa.ods
uzupełniony o pobieranie danych z listy adresowej
(49.79 KiB) Pobrany 13 razy
Ad flagi/kolory: formatowanie warunkowe.
Najpierw warto przygotować zestaw stylów odpowiadających poszczególnym statusom.
Potem w formatowaniu warunkowym (Format → Warunkowe → Zarządzaj) analizować wartość formuł postaci
today() > data z komórki + wartość progowa
Odpowiednia opcja nazywa się `Formuła to`, a jako akcję podać `Zastosuj styl` odpowiedni dla danego progu.
Kolejność warunków ma znaczenie; zastosowane będzie formatowanie odpowiadające pierwszemu spełnionemu warunkowi — czyli takiemu, którego formuła daje wynik True, ew. liczbowy różny od 0.
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jan_J pisze: pn lut 17, 2025 7:28 pm Ad uzupełnianie: funkcja wyszukująca czyli vlookup (wyszukaj.pionowo) albo para funkcji match / index (podaj.pozycję / indeks). Patrz załącznik
przypominajka o końcu terminu certyfikacji wzorcowania - testowa.ods

Ad flagi/kolory: formatowanie warunkowe.
Najpierw warto przygotować zestaw stylów odpowiadających poszczególnym statusom.
Potem w formatowaniu warunkowym (Format → Warunkowe → Zarządzaj) analizować wartość formuł postaci
today() > data z komórki + wartość progowa
Odpowiednia opcja nazywa się `Formuła to`, a jako akcję podać `Zastosuj styl` odpowiedni dla danego progu.
Kolejność warunków ma znaczenie; zastosowane będzie formatowanie odpowiadające pierwszemu spełnionemu warunkowi — czyli takiemu, którego formuła daje wynik True, ew. liczbowy różny od 0.
Dziękuje za pomoc.
Próbowałem z tymi flagami, niestety niezaleznie od kolejności cały czas pokazuje mi flagę "bordową" przypisaną wartości poniżej 0
Windows 10
LibreOffice 25.2.0.3.
Jan_J
Posty: 4617
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jan_J »

Dobrze; przymierzę się w wolnej chwili, ale nie obiecuję, że dzisiaj.
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jan_J pisze: śr lut 19, 2025 11:05 am Dobrze; przymierzę się w wolnej chwili, ale nie obiecuję, że dzisiaj.
Dziękuję, ja też popróbuję posiedziec nad tym.
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

Trochę pogrzebałem przy twoim projekcie. Może niepotrzebnie, ale podsyłam ci skoroszyt, w którym zobaczysz funkcjonowanie formatowania warunkowego.
Co pozmieniałem?
Usunąłem kolumnę "Flaga", a jej kolorem zaznaczam tę część wiersza, która jest zablokowana na ekranie.
Zmodyfikowałem sposób wyznaczania daty następnej certyfikacji w taki sposób, że zamiast ostatniej daty certyfikacji należy wprowadzić datę pierwszej certyfikacji (czyli chyba datę podpisania umowy) oraz okres powtarzania certyfikacji w miesiącach. W arkuszu, na podstawie tych danych automatycznie wyznaczana jest data najbliższej wymaganej certyfikacji względem aktualnej daty. Tylko że przy tym sposobie nie mogę otrzymać ujemnej liczby dni ważności certyfikatu, dlatego w tym rozwiązaniu uznałem, że wygaśnięcie certyfikatu (uznałem, że o tym informuje kolumna "Akredytacja") oznaczy wiersz kolorem bordowym.
W stopce sygnalizujesz LibreOffice 24.8, więc do dopisania adresów mailowych i telefonów zastosowałem dostępną dopiero od tej wersji funkcję X.WYSZUKAJ().
Co do problemu informowania mailami odbiorców o konieczności odnowienia, to mając taką bazę "przypominajkową" można pomyśleć o przygotowaniu korespondencji seryjnej wysyłającej maile do klientów. Nie wymaga to wówczas pisania makr. Ale to temat do chyba odrębnego omówienia.
Załączniki
mar testowy.ods
(53.43 KiB) Pobrany 11 razy
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jermor pisze: śr lut 19, 2025 12:50 pm Trochę pogrzebałem przy twoim projekcie. Może niepotrzebnie, ale podsyłam ci skoroszyt, w którym zobaczysz funkcjonowanie formatowania warunkowego.
Co pozmieniałem?
Usunąłem kolumnę "Flaga", a jej kolorem zaznaczam tę część wiersza, która jest zablokowana na ekranie.
Zmodyfikowałem sposób wyznaczania daty następnej certyfikacji w taki sposób, że zamiast ostatniej daty certyfikacji należy wprowadzić datę pierwszej certyfikacji (czyli chyba datę podpisania umowy) oraz okres powtarzania certyfikacji w miesiącach. W arkuszu, na podstawie tych danych automatycznie wyznaczana jest data najbliższej wymaganej certyfikacji względem aktualnej daty. Tylko że przy tym sposobie nie mogę otrzymać ujemnej liczby dni ważności certyfikatu, dlatego w tym rozwiązaniu uznałem, że wygaśnięcie certyfikatu (uznałem, że o tym informuje kolumna "Akredytacja") oznaczy wiersz kolorem bordowym.
W stopce sygnalizujesz LibreOffice 24.8, więc do dopisania adresów mailowych i telefonów zastosowałem dostępną dopiero od tej wersji funkcję X.WYSZUKAJ().
Co do problemu informowania mailami odbiorców o konieczności odnowienia, to mając taką bazę "przypominajkową" można pomyśleć o przygotowaniu korespondencji seryjnej wysyłającej maile do klientów. Nie wymaga to wówczas pisania makr. Ale to temat do chyba odrębnego omówienia.
Dziękuje za pomoc, ale niestety jest źle wyliczana data następnej certyfikacji. Nie liczy roku, tylko zmienia się miesiąc. np wczesniejsza jest z 2022 a dodając np 3 miesiące wyświetla się 2025 r :) Dlatego nie robią sie ujemne dni i miesiące. W domu sobie na spokojnie przejrzę te Flagi, które zrobiłeś. Jestem ciekawy, gdzie popełniłem błąd, skoro cały czas mi świeciła sie na bordowo flaga :) (patrz wpis wyżej)
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

Data następnej certyfikacji wylicza się dobrze. Bo obliczana jest na podstawie daty początkowej całego procesu, a nie daty ostatniej certyfikacji. W tym przypadku, przy certyfikowaniu co pół roku, wypada dokładnie w tym samym dniu i miesiącu co data początkowa, ale w roku bieżącym. Tak to wymyśliłem, żeby nie trzeba było za każdym razem zmieniać daty ostatniej certyfikacji. Dlatego napisałem, że grzebałem w tym może niepotrzebnie.
No i uwaga na wersję LibreOffice. Zasugerowałem się liczbą 24 i nie spojrzałem, co jest dalej. Te nowe funkcje dostępne są dopiero od wersji 24.8
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jermor pisze: śr lut 19, 2025 2:39 pm Data następnej certyfikacji wylicza się dobrze. Bo obliczana jest na podstawie daty początkowej całego procesu, a nie daty ostatniej certyfikacji. W tym przypadku, przy certyfikowaniu co pół roku, wypada dokładnie w tym samym dniu i miesiącu co data początkowa, ale w roku bieżącym. Tak to wymyśliłem, żeby nie trzeba było za każdym razem zmieniać daty ostatniej certyfikacji. Dlatego napisałem, że grzebałem w tym może niepotrzebnie.
No i uwaga na wersję LibreOffice. Zasugerowałem się liczbą 24 i nie spojrzałem, co jest dalej. Te nowe funkcje dostępne są dopiero od wersji 24.8
Masz rację, jest to fajne rozwiazane. Bardzo ułatwiające pod warunkiem, że klienci są suksesywni. Niestety, czasem jest tak, że przyrząd trafia do certyfikacji z miesiecznym/ kilkutygodniowym wyprzedzeniem (i ma sie z głowy), czasem jest tak, że klienci potrafią z miesiecznym opóźnieniem przynieść. Wtedy liczenie nie jest od pierszej wpisanej daty certyfikacji, ale ostatniej. No i jeszcze kwestia terminów różnych laboratoriów. Jedne potrafia wykonac certyfikacje w ciagu 2 tygodni, drudzy maja na to 31 dni. A zdażyło sie 2x, że labolatoria wystawiły certyfikat z 3 miesiecznym opóźnieniem po otrzymaniu przyrządu, ponieważ sami musieli wysłać swoje przyrządy wzorcujące do certyfikacji. Dlatego uznałem, że bezpieczniejsza opcja jest jednak reczne wpisywanie ostatniej daty certyfikacji z dokumentów, niżeli miałby "liczyć automat".

Ale dziękuję za pomoc
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

No tak, jak się nie zna całej procedury, to się coś wymyśla.
Sądzę jednak, że przyda ci się przynajmniej formuła wyznaczająca następny termin certyfikacji (w twoim pliku)

Kod: Zaznacz cały

=JEŻELI(I3="";"";NR.SER.DATY(I3;J3))
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jermor pisze: śr lut 19, 2025 8:21 pm No tak, jak się nie zna całej procedury, to się coś wymyśla.
Sądzę jednak, że przyda ci się przynajmniej formuła wyznaczająca następny termin certyfikacji (w twoim pliku)

Kod: Zaznacz cały

=JEŻELI(I3="";"";NR.SER.DATY(I3;J3))
Już wiem co robiłem źle z flagami, ja wybierałem zakres dni "od-do", co było dla mnie bardziej logiczne. Ty użyłeś (znazwę to) "kolejności zastępowania kolorów"
Wstawiłem do oryginalnego pliku i działa.
Dzięki.
Jeszcze tylko te wysyłanie @ mi zostało
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

To nie ma znaczenia, jakich wartości użyłeś. Mogłeś użyć dat "od — do", ale w odpowiedniej kolejności. Tyle że w kolumnie L masz już wyliczoną liczbę dni, więc wygodniej jest ją wykorzystać.
Wykorzystanie dat powinno być wpisane w następującej kolejności (napisał o tym @Jan_J w swojej odpowiedzi):

Kod: Zaznacz cały

K3-DZIŚ()<0
I(K3-DZIŚ()>=0;K3-DZIŚ()<=14)
I(K3-DZIŚ()>14;K3-DZIS()<=31)
I(K3-DZIS()>31;K3-DZIŚ()<=62)
K3-DZIŚ()>62
tutaj także można wykorzystać "kolejność zastępowania kolorów":

Kod: Zaznacz cały

K3-DZIŚ()<0
K3-DZIŚ()<=14
K3-DZIS()<=31
K3-DZIŚ()<=62
K3-DZIŚ()>62
Co do maili. Jak wspomniałem, można do tego wykorzystać właściwość korespondencji seryjnej. Jest to funkcjonalność Writera wykorzystująca zarejestrowaną bazę danych. Taką zarejestrowaną bazą może być skoroszyt arkusza kalkulacyjnego. Jest tu jednak pewne ograniczenie. Konkretna tabela wykorzystywana jako baza musi zaczynać się w komórce A1 arkusza, a pierwszy wiersz musi zawierać nazwy kolumn, od wiersza drugiego znajdują się już dane.
W opcjach programu Writer należy zdefiniować parametry serwera pocztowego, natomiast sama wysyłka realizowana jest przez program pocztowy zarejestrowany w systemie.
O korespondencji seryjnej napisałem tutaj: https://yestok.pl/lbo/y34.php
Jeśli ten pomysł cię zainteresuje, mogę go przedstawić bardziej szczegółowo. Ze względu na to, że jest to funkcjonalność Writera, sugerowałbym nowy temat w dziale Writer naszego forum.
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jermor pisze: czw lut 20, 2025 3:22 pm
Co do maili. Jak wspomniałem, można do tego wykorzystać właściwość korespondencji seryjnej. Jest to funkcjonalność Writera wykorzystująca zarejestrowaną bazę danych. Taką zarejestrowaną bazą może być skoroszyt arkusza kalkulacyjnego. Jest tu jednak pewne ograniczenie. Konkretna tabela wykorzystywana jako baza musi zaczynać się w komórce A1 arkusza, a pierwszy wiersz musi zawierać nazwy kolumn, od wiersza drugiego znajdują się już dane.
W opcjach programu Writer należy zdefiniować parametry serwera pocztowego, natomiast sama wysyłka realizowana jest przez program pocztowy zarejestrowany w systemie.
O korespondencji seryjnej napisałem tutaj: https://yestok.pl/lbo/y34.php
Jeśli ten pomysł cię zainteresuje, mogę go przedstawić bardziej szczegółowo. Ze względu na to, że jest to funkcjonalność Writera, sugerowałbym nowy temat w dziale Writer naszego forum.
Dziekuję, potrzebuję mieć wszystko w jednym pliku, ponieważ nie tylko ja bede z tego korzystał, a każdy dodatkowy plik to niestety dodatkowe minuty pracy z nim, których nie zawsze mam. Postanowiłem zwrócić się do AI o pomoc w pisaniu makra. Jak na razie udało się stworzyc działające makro pod jeden przycisk. Ale od kilku dni walczę, aby automatycznie makro dodawało przyciski do nowych pozycji w liście i uzupełnił brakujace. Mimo makra które powinno odpowiadac za taka czynnosc, nadal przycisk jest jeden główny. Jak nie uda mi się dogadać z AI, to podeslę tutaj plik, może Wy forumowicze, specjaliści bedziecie mogli poprawić nasz (moje i AI) wypociny. Bo nie mogę zlokalizowac błędu.
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

Ja bym nie tworzył przycisków przy każdej pozycji.
Sugeruję przypisanie makra do dodatkowego polecenia w pasku narzędziowym. Przycisk byłby wykorzystany po kliknięciu lub wskazaniu przy pomocy klawiatury jednej z komórek wiersza, który ma być podstawą treści maila. Makro powinno zlokalizować ten wiersz i na jego podstawie wysłać maila. Aby zabezpieczyć się przed przypadkową wysyłką, makro powinno wystawiać komunikat o wysłaniu maila, z informacjami kogo dotyczą. Użytkownik musiałby tylko zatwierdzić albo odrzucić realizację.
To ułatwiłoby sposób dodawania (usuwania) wierszy.
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jermor pisze: wt lut 25, 2025 9:13 pm Ja bym nie tworzył przycisków przy każdej pozycji.
Sugeruję przypisanie makra do dodatkowego polecenia w pasku narzędziowym. Przycisk byłby wykorzystany po kliknięciu lub wskazaniu przy pomocy klawiatury jednej z komórek wiersza, który ma być podstawą treści maila. Makro powinno zlokalizować ten wiersz i na jego podstawie wysłać maila. Aby zabezpieczyć się przed przypadkową wysyłką, makro powinno wystawiać komunikat o wysłaniu maila, z informacjami kogo dotyczą. Użytkownik musiałby tylko zatwierdzić albo odrzucić realizację.
To ułatwiłoby sposób dodawania (usuwania) wierszy.
Makro jest już dla mnie problematyczne (kosmos), a co dopiero dodatkowe przyciski w pasku narzędziowym.
Obecnie przycisk automatycznie, w tle, nie wysyła @, a otwiera np Thunbirda czy Outlooko z adresem, tematem i treścią pobieraną z istniejących już komórek. Więc jeśli nawet przez przypadek zostanie wcisnięty przycisk, to i tak trzeba potwierdzić wysłanie w otwartym okienku Thunbirda.
Niestety nadal nie wiem, dlaczego automatycznie nie dodaje kolejnych przycisków do wysylania @

Kod: Zaznacz cały

Sub SendEmailFromRow(oEvent As Object)
    Dim oSheet As Object
    Dim oButton As Object
    Dim eMailAddress As String
    Dim Subject As String
    Dim Message As String
    Dim Message1 As String
    Dim Message2 As String
    Dim Message3 As String
    Dim Message4 As String
    Dim Message5 As String
    Dim oShell As Object
    Dim MailCommand As String
    Dim row As Long
    Dim oCell As Object
    Dim btnName As String

    ' Pobranie aktywnego arkusza
    oSheet = ThisComponent.CurrentController.ActiveSheet

    ' Pobranie przycisku, który wywołał makro
    oButton = oEvent.Source.Model
    btnName = oButton.Name

    ' Pobranie numeru wiersza z nazwy przycisku (np. "Email_1" → 1)
    If InStr(btnName, "_") = 0 Then Exit Sub
    row = CLng(Mid(btnName, InStr(btnName, "_") + 1))

    ' Pobranie adresu e-mail (kolumna R = 17)
    oCell = oSheet.getCellByPosition(17, row)
    eMailAddress = Trim(oCell.getString())
    If eMailAddress = "" Then eMailAddress = Trim(oCell.getFormula())
    If eMailAddress = "" Then eMailAddress = Trim(CStr(oCell.getValue()))

    ' Sprawdzenie, czy adres e-mail istnieje
    If eMailAddress = "" Or eMailAddress = "0" Then
        MsgBox "Brak adresu e-mail w wierszu " & (row + 1), 48, "Błąd"
        Exit Sub
    End If

    ' Pobranie treści wiadomości
    Subject = " - Przypomnienie o zbliżającym się terminie."
    Message1 = oSheet.getCellByPosition(4, row).String ' Kolumna E - przyrząd
    Message2 = oSheet.getCellByPosition(5, row).String ' Kolumna F - model
    Message3 = oSheet.getCellByPosition(6, row).String ' Kolumna G - nr seryjny
    Message4 = oSheet.getCellByPosition(11, row).String ' Kolumna L - następna data
    
    ' Pobranie wyświetlanej wartości z kolumny P (15)
    Dim oCellP As Object
    oCellP = oSheet.getCellByPosition(15, row)
    
    If oCellP.Type = com.sun.star.table.CellContentType.VALUE Then
        Message5 = CStr(oCellP.getValue()) ' Pobiera wartość liczbową jako tekst
    Else
        Message5 = oCellP.getString() ' Pobiera zwykły tekst
    End If

    ' Tworzenie treści e-maila
    Message = "Dzień dobry,%0A%0A" & _
              "Przypominamy, że zbliża się " & Message5 & " przyrządu : " & "%0A" & _
              Message1 & "%0A" & _
              "Model: " & Message2 & "%0A" & _
              "Numer seryjny: " & Message3 & "%0A%0A" & _
              "Koniec ważności dokumentu " & Message5 & " przypisano na dzień " & Message4 & ".%0A%0A"

    ' Tworzenie polecenia mailto
    MailCommand = "mailto:" & eMailAddress & "?subject=" & Message5 & Subject & "&body=" & Message

    ' Uruchomienie klienta pocztowego
    On Error GoTo ErrorHandler
    oShell = createUnoService("com.sun.star.system.SystemShellExecute")
    oShell.execute(MailCommand, "", 0)
    Exit Sub

ErrorHandler:
    MsgBox "Nie można wysłać e-maila. Sprawdź klienta poczty.", 48, "Błąd"
End Sub

' ===================================================
' 🛠 Automatyczne dodawanie przycisków do wysyłania e-maili
' ===================================================
Sub AddEmailButtons()
    Dim oSheet As Object
    Dim oDoc As Object
    Dim oDrawPage As Object
    Dim oButton As Object
    Dim oForm As Object
    Dim row As Long
    Dim lastRow As Long
    Dim btnName As String
    Dim oCell As Object
    Dim oExistingButton As Object
    Dim oShape As Object

    ' Pobranie aktywnego arkusza i strony rysowania
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' Pierwszy arkusz
    oDrawPage = oSheet.DrawPage ' Strona rysowania dla przycisków

    ' Pobranie ostatniego wiersza z danymi w kolumnie R (17) - adresy e-mail
    lastRow = GetLastRow(oSheet, 17)

    ' Iteracja po wierszach i tworzenie przycisków
    For row = 1 To lastRow
        btnName = "Email_" & row
        oCell = oSheet.getCellByPosition(17, row)

        ' Pobranie wyświetlanej wartości (jeśli formuła)
        Dim emailAddress As String
        If oCell.FormulaResultType = com.sun.star.table.CellContentType.VALUE Then
            emailAddress = Trim(CStr(oCell.getValue()))
        Else
            emailAddress = Trim(oCell.getString())
        End If

        ' Jeśli brak adresu e-mail, pomiń ten wiersz
        If emailAddress = "" Then GoTo ContinueLoop

        ' Sprawdzenie, czy przycisk już istnieje
        oExistingButton = Nothing
        On Error Resume Next
        oExistingButton = oDrawPage.getByName(btnName)
        On Error GoTo 0

        ' Jeśli przycisk już istnieje, pomiń dodawanie nowego
        If Not IsNull(oExistingButton) Then GoTo ContinueLoop

        ' Tworzenie kształtu dla przycisku
        oShape = oDoc.createInstance("com.sun.star.drawing.ControlShape")
        oShape.Size = CreateUnoStruct("com.sun.star.awt.Size")
        oShape.Position = CreateUnoStruct("com.sun.star.awt.Point")
        
        ' Ustawienie pozycji i rozmiaru przycisku
        oShape.Position.X = 9000  ' Pozycja pozioma (dostosuj)
        oShape.Position.Y = row * 500 ' Dopasowanie do wiersza
        oShape.Size.Width = 2500
        oShape.Size.Height = 1000

        ' Tworzenie obiektu przycisku
        oButton = oDoc.createInstance("com.sun.star.form.component.CommandButton")
        oButton.Name = btnName
        oButton.Label = "Wyślij e-mail"

        ' Przypisanie makra do przycisku
        Dim oMacro As New com.sun.star.script.ScriptEventDescriptor
        oMacro.EventMethod = "execute"
        oMacro.ScriptCode = "vnd.sun.star.script:Standard.Module1.SendEmailFromRow?language=Basic&location=document"
        oButton.Events.insertByName("Execute", oMacro)

        ' Dodanie kontrolki do kształtu
        oShape.Control = oButton

        ' Dodanie przycisku do arkusza
        oDrawPage.add(oShape)

ContinueLoop:
    Next row
End Sub

' ===================================================
' 🔍 Znalezienie ostatniego wiersza z danymi w danej kolumnie
' ===================================================
Function GetLastRow(oSheet As Object, col As Integer) As Long
    Dim row As Long
    Dim oCell As Object

    ' Sprawdzanie od dołu arkusza, szukając pierwszej niepustej komórki
    For row = 999 To 0 Step -1  ' Zakładamy max 1000 wierszy
        On Error Resume Next
        oCell = oSheet.getCellByPosition(col, row)
        On Error GoTo 0

        If Not IsNull(oCell) Then
            If Trim(oCell.getString()) <> "" Then
                GetLastRow = row
                Exit Function
            End If
        End If
    Next row

    GetLastRow = 0 ' Jeśli brak danych, zwracamy 0
End Function
Załączniki
przypominajka o końcu terminu certyfikacji wzorcowania test.ods
(71.81 KiB) Pobrany 11 razy
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Rafkus
Posty: 531
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Rafkus »

Zastanawiałem się nad problem dodawania przycisków do dokumentu i znalazłem pewne problematyczne elementy które poprawiłem. Spróbuj tego rozwiązania:

Kod: Zaznacz cały

' ===================================================
'  Automatyczne dodawanie przycisków do wysyłania e-maili
' ===================================================
Sub AddEmailButtons()
    Dim oSheet As Object
    Dim oDoc As Object
    Dim oDrawPage As Object
    Dim oButton As Object
    Dim oForms As Object
    Dim row As Long
    Dim lastRow As Long
    Dim btnName As String
    Dim oCell As Object
    Dim oExistingButton As Boolean
    Dim oShape As Object

    ' Pobranie aktywnego arkusza i strony rysowania
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' Pierwszy arkusz
    oDrawPage = oSheet.DrawPage ' Strona rysowania dla przycisków
    oForms = oDrawPage.Forms(0)    

    ' Pobranie ostatniego wiersza z danymi w kolumnie R (17) - adresy e-mail
    lastRow = GetLastRow(oSheet, 17)

    ' Iteracja po wierszach i tworzenie przycisków
    For row = 2 To lastRow
        btnName = "Email_" & row
        oCell = oSheet.getCellByPosition(17, row)

        ' Pobranie wyświetlanej wartości (jeśli formuła)
        Dim emailAddress As String
        If oCell.FormulaResultType = com.sun.star.table.CellContentType.VALUE Then
            emailAddress = Trim(CStr(oCell.getValue()))
        Else
            emailAddress = Trim(oCell.getString())
        End If

        ' Jeśli brak adresu e-mail, pomiń ten wiersz
        If emailAddress = "" Then GoTo ContinueLoop

        ' Sprawdzenie, czy przycisk już istnieje
        oExistingButton = oForms.hasByName(btnName)
            
        ' Jeśli przycisk już istnieje, pomiń dodawanie nowego
         If  oExistingButton Then GoTo ContinueLoop         
         
        ' Tworzenie obiektu przycisku
        oButton = oDoc.createInstance("com.sun.star.form.component.CommandButton")
        oButton.Name = btnName
        oButton.Label = "Wyślij e-mail"
         
        ' Tworzenie kształtu dla przycisku
        oShape = oDoc.createInstance("com.sun.star.drawing.ControlShape") 
        oShape.Name = "Formant " & row	'nazwa "rysunku"
        
        ' Ustawienie pozycji i rozmiaru przycisku
        oCell = oSheet.getCellByPosition(20, row)	 'do tej komórki wstaw przycisk
        oShape.setControl(oButton)			' Dodanie kontrolki do kształtu
        oSheet.DrawPage.add(oShape) 		' Dodanie przycisku do arkusza
        oShape.Anchor = oCell
        oShape.setSize(oCell.Size)
        oShape.setPosition(oCell.Position)
        
        ' Przypisanie makra do przycisku
        Dim oMacro As New com.sun.star.script.ScriptEventDescriptor
        oMacro = CreateUnoStruct("com.sun.star.script.ScriptEventDescriptor")
        With oMacro
        	.AddListenerParam = ""
        	.EventMethod = "actionPerformed"
        	.ListenerType = "XActionListener"
        	'.ScriptCode = "vnd.sun.star.script:Standard.Module1.SendEmailFromRow?language=Basic&location=document" 'położenie makra
        	.ScriptCode = "vnd.sun.star.script:Standard.Module1.SendEmailFromRow?language=Basic&location=application" '
        	.ScriptType = "Script"
        End With
        oForms.registerScriptEvent(oForms.Count-1, oMacro)
        
ContinueLoop:
    Next row
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
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Rafkus pisze: śr lut 26, 2025 7:45 pm Zastanawiałem się nad problem dodawania przycisków do dokumentu i znalazłem pewne problematyczne elementy które poprawiłem. Spróbuj tego rozwiązania:
Jest lepiej niż było jak mi AI proponowało rozwiązania. Dziękuję.
Ale nie wiem czy to tak ma działać. U mnie działa dopiero, że jak zaznacze pustą komórkę w wierszu z danymi gdzie ma być przycisk (ale go jeszcze nie ma) i uruchomie makro, wtedy dodają sie przyciski do pozostałych wierszy. Osoby, które nie znaja się na formułkach i makrach będą miały problem z uruchamianiem.
Moim zamysłem było, że jak wstawiam nowy wiersz z klientem, pojawia sie z automatu e-mail oraz przycisk. Niestety, u mnie nie działa. Może coś źle to robie dalej?
Zastanawiałem sie też nad innym rozwiązaniem.
Skoro przyciski nie pojawiają się automatycznie po dodaniu nowego wiersza z danymi, to może jest opcja uruchamiania makra wysyłania e-mail poprzez nacisnięcie samego napisu (bez przycisku) "Wyślij @" w komórce. A taki napis jest łatwiejszy do ogarnięcia, żeby sam się pojawiał.
Dziś w wolnej chwili, spróbuję. A jak nie to albo znów będe męczył kilka dni AI żeby prawidłowo mi makro stworzył, albo (jesli mogę ;) pozawracam Tobie i innym forumowiczom głowę.

ps. zmieniłem na nowszą wersje Libre. Stwierdziłem, że może tu leży wina, że mi nie działaja przyciski jak mam w zamysłach. Nic to nie dało.
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Rafkus
Posty: 531
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Rafkus »

Mar i już pisze: czw lut 27, 2025 7:59 am U mnie działa dopiero, że jak zaznacze pustą komórkę w wierszu z danymi gdzie ma być przycisk (ale go jeszcze nie ma) i uruchomie makro, wtedy dodają sie przyciski do pozostałych wierszy.
I właśnie tak jest skonstruowane to makro. Ono działa dopiero po jego uruchomieniu.
Mar i już pisze: czw lut 27, 2025 7:59 am Moim zamysłem było, że jak wstawiam nowy wiersz z klientem, pojawia sie z automatu e-mail oraz przycisk.
Zobacz ten link, jest tam przestawione pewne rozwiązanie: Po wpisaniu czegoś do komórki z zakresu B1:B1000, program automatycznie, w tym samym wierszu ale w kolumnie A wpisze aktualną datę. Można nieco przerobić tamtejsze makro aby zamiast wpisywać datę - uruchomiało się makro wstawiające przycisk. Uwaga, w dokumencie musi być przynajmniej jeden obiekt formularza (np przycisk) bo podczas pierwszego uruchomienia makra powstanie błąd.
Osobiście nie wstawiałbym dużej ilości przycisków do pliku, obawiałbym się, że niepotrzebnie wzrósłby jego rozmiar. Zaprezentowane rozwiązanie zrealizowałem tylko z ciekawości.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

Podsyłam ci twój arkusz z makrem utworzonym wg mojej propozycji. W arkuszu „Przypominajka” znajduje się jeden przycisk wywołujący makro. Makro działa wg następującej zasady:
  • Identyfikuje aktualnie aktywny arkusz i jeśli nie jest to arkusz „Przypominajka”, wystawia komunikat „Niewłaściwy punkt wywołania makra” i przerywa działanie.
  • Identyfikuje aktywny obszar komórek. Jeśli obszar aktywny składa się z kilku komórek lub kilku obszarów, wystawia komunikat „Aktywny jest co najmniej jeden obszar” i przerywa działanie.
  • Pobiera nr wiersza aktywnej komórki i sprawdza, czy jest on mniejszy od ostatniego wiersza użytego w arkuszu lub równy temu wierszowi. Jeśli odpowiedzią jest FAŁSZ, wystawia komunikat „Aktywna komórka poniżej ostatniego wiersza danych” i przerywa działanie.
  • Sprawdza, czy w aktywnym wierszu, w kolumnie R wpisany jest poprawny adres e-mailowy. Jeśli nie jest poprawny lub go nie wpisano, wystawia komunikat „Brak adresu e-mail lub jest błędny” i przerywa działanie.
  • Na podstawie danych znajdujących się w wierszu tworzy treść tematu wiadomości oraz treść maila, a następnie wystawia komunikat „Wysyłasz maila do…” podając nazwę klienta z kolumny C. Komunikat pozwala wybrać opcję „Anuluj” co oznacza, że makro nie zostanie wysłane.
  • Po tej sekwencji następuje aktywowanie wysyłania maila.
W moim makro wykorzystałem kod podany przez Andrew Pitonyak-a (kod znajduje się w „Useful Macro Information For OpenOffice By Andrew Pitonyak” na stronie 86), wysyłający maile za pośrednictwem programu Outlook. Wysyłanie odbywa się w tle bez wywoływania okna programu. Jako domyślnego klienta poczty mam ustawiony Outlook(new) i zadziałał, i sprawdziłem, że działa także z Outlook 2007.

Uwagi dotyczące kodu makra.
Zaznaczyłeś, że używasz LibreOffice w wersji 24. Już od wersji 7 (i tylko w LibreOffice) wbudowana jest biblioteka ScriptForge. Wykorzystałem z niej funkcję SF_String.IsEmail(), która służy do sprawdzenia, czy określony ciąg znaków może zostać uznany za prawidłowy adres mailowy. Dlatego została przywołana na początku kodu.
Wykorzystałem także standardowo dodawaną bibliotekę „Tools”, w której znajduje się funkcja GetLastUsedRow(), zwracająca numer ostatniego użytego wiersza w arkuszu, który jest jej argumentem.
Użyłem też w programie nazw zmiennych w języku polskim, takie zmienne są zapisywane w nawiasach [RodzajUsługi] oraz [Treść].
Może będzie ci to odpowiadało.
Załączniki
0_przypominajka o maile.ods
(77.79 KiB) Pobrany 11 razy
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jermor pisze: czw lut 27, 2025 9:23 pm Podsyłam ci twój arkusz z makrem utworzonym wg mojej propozycji. ...
Super pomysł z tym jednym przyciskiem. Ale okazuje się, że makro pracuje tylko z Outlookiem, przy thunbird wyskakuje błąd
U nas z tego pliku korzystać będą zarówno uzytkownicy Thunderbirda i Outlooka. Ja np mam tylko pakiet Libre i Thunbirda (+ współpracownik), a włąściciel korzysta z pakietu MsOffice. I juz widzę, że rodzą się kolejne problemy z makrem.
Bo zaraz okaże się, że makro może pracować albo z Thunbirdem albo Outlookiem, lub Tylko z Libre Office Calc i juz Excel nie ogarnie go.

Chyba daruje sobię ten pkt z automatycznym wysyłaniem @, bo rodzi się za wiele problemów.

Dziękuje wszystkim za pomoc i pomysły.
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

Masz rację, że to makro nie wykona się w Excelu. To już prędzej makro z Excela wykona się w LibreOffice.
To makro nie wykona sie także w Apache OpenOffice ze względu na wykorzystanie biblioteki ScriptForge, której Apache nie ma.
Zakładając, że excelowcy nie będą wysyłali maili, przedstawiam ci wersję, która wysyła zarówno z Outlooka jak i ThunderBirda (a może i innych klientów poczty, ale ja mam tylko te dwa), bo proces jest uniwersalny. Wykorzystuje domyślnego klienta ustalonego w parametrach systemu. To makro wywołuje klienta pocztowego z wypełnionymi tekstami. Użytkownik musi zatwierdzić wysyłkę. Kod także znajduje się we wspomnianym opracowaniu Pitonyak-a
Moduł obsługujący wysyłkę przez Outlooka przekształciłem w samodzielne makro o nazwie MailByOutlook() i dołączyłem nowe makro SendByURL()
W Makrze głównym po komentarzu "Wysyłanie poczty" należy wskazać, które z nich ma zostać wykonane. W odesłanym pliku uaktywnione jest makro SendByURL().
Załączniki
0_przypominajka o maile w.1.ods
Dodałem nowe makro do wysyłki przez ogólnego klienta pocztowego.
(78 KiB) Pobrany 12 razy
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jermor pisze: pt lut 28, 2025 1:30 pm Masz rację, że to makro nie wykona się w Excelu. To już prędzej makro z Excela wykona się w LibreOffice.
To makro nie wykona sie także w Apache OpenOffice ze względu na wykorzystanie biblioteki ScriptForge, której Apache nie ma.
Zakładając, że excelowcy nie będą wysyłali maili, przedstawiam ci wersję, która wysyła zarówno z Outlooka jak i ThunderBirda (a może i innych klientów poczty, ale ja mam tylko te dwa), bo proces jest uniwersalny. Wykorzystuje domyślnego klienta ustalonego w parametrach systemu. To makro wywołuje klienta pocztowego z wypełnionymi tekstami. Użytkownik musi zatwierdzić wysyłkę. Kod także znajduje się we wspomnianym opracowaniu Pitonyak-a
Moduł obsługujący wysyłkę przez Outlooka przekształciłem w samodzielne makro o nazwie MailByOutlook() i dołączyłem nowe makro SendByURL()
W Makrze głównym po komentarzu "Wysyłanie poczty" należy wskazać, które z nich ma zostać wykonane. W odesłanym pliku uaktywnione jest makro SendByURL().
Jest super, coraz lepiej.
Jeszcze tylko może uda mi się zrobić tak, żeby makro umieszczało sie w pliku, a nie w programie.
Testowałem na innym komputerze z Libre i Thunderbirdem i nie działa. Po sprawdzeniu makra okazało sie, że makro nie jest umieszczone w pliku, tylko w programie. Dlatego nie jest wyświetlane na innych komputerach, które korzystają z jednego pliku. Niestety nie moge znaleść w Twoim makrze linijki która by odpowiadała za to.
np jak miałem w poprzedniej wersji

Kod: Zaznacz cały

.ScriptCode = "vnd.sun.star.script:Standard.Module1.SendEmailFromRow?language=Basic&location=document"
Opcja jest jeszcze pokopiowanie do każdego komputera makra

ps. Jednak w drugim kompie były wyłączone makra oraz nie jest aktualny pakiet Libre. To juz sprawdzę w przyszłym tyg, czy to jest ten problem nie działania. Sprawdze też czy działa z Outlookiem na jeszcze innym innym kompie

Dziekuje za wszelką pomoc
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

Nie bardzo rozumiem, o co chodzi.
Makra w LibreOffice (w Apache OpenOffice też) zapisywane są w kontenerach zawierających biblioteki makr. Są trzy typy kontenerów:
  • Kontener "Makra i okna dialogowe aplikacji", ten kontener dostarczany jest z oprogramowaniem Office i nie pozwala na dokonywanie w nim żadnych zmian.
  • Kontener "Moje okna dialogowe i makra", ten kontener powstaje w konkretnej instalacji oprogramowania dla każdego logującego się do systemu użytkownika. W tym kontenerze można tworzyć swoje biblioteki makr i przechowywać w nich swoje makra. Makra z tego kontenera można wywołać w dowolnym komponencie pakietu Office.
  • Kontener pliku, ten kontener powiązany jest z konkretnym plikiem i zawiera makra zazwyczaj niezbędne przy używaniu tego pliku. Makra mogą być uruchomione po otwarciu tego pliku.
Istnieje jeszcze jeden typ kontenera, związany z sieciową instalacją oprogramowania, ale o nim nic nie wiem. Nigdy nie pracowałem z sieciową wersją pakietu.
Przesłany plik zawiera makra właśnie w kontenerze pliku, więc mogą zostać uruchomione na dowolnym komputerze.
Pliki, które zawierają makra we własnym kontenerze, a środowisko Office ma ustawione indywidualne opcje bezpieczeństwa makr, mogą być używane, ale uruchamianie makr może być blokowane. O tych zasadach napisałem tutaj: https://yestok.pl/ooo/y58.php
Makro może się nie wykonać poprawnie na komputerze, w którym nie ma biblioteki ScriptForge, dotyczy to wydań mniejszych od wersji 7, a te ciągle jeszcze mogą być używane.
Uwaga do ciebie. Niestety informacja typu
Mar i już pisze: pt lut 28, 2025 3:50 pm Testowałem na innym komputerze z Libre i Thunderbirdem i nie działa
nic nie wniesie do wyjaśnienia sprawy. Równie dobrze mógłbym zapytać cię: chciałem uruchomić silnik w samochodzie i nie działa.
Dołączam jeszcze raz plik, tym razem z wersją 2. W treści przycisku wysyłki podkreślona jest litera "m", sygnalizuje ona, że można w trakcie pracy nacisnąć skrót klawiaturowy Lewy ALT+M co zostanie potraktowane tak, jak kliknięcie tego przycisku.
Załączniki
0_przypominajka o maile w.2.ods
(77.98 KiB) Pobrany 14 razy
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jermor pisze: pt lut 28, 2025 4:59 pm Nie bardzo rozumiem, o co chodzi.
Już tłumaczę.
Plik będzie umieszczony gdzieś w necie na serwerze w chmurze, żeby każdy z pracowników miał dostęp do niego i mógł dopisywać pozycje i wysyłać przypomnieni (żebym nie tylko ja był obciążony tym).
Zauważyłem, że makro zapisuje się w aplikacji, czyli musze kopiowac te makro do każdego komputera żeby działało na tych kompach. Przy każdej zmianie w makrze, musze ponownie kopiować do każdego kompa.
Wiem, że są funkcje, aby makro zapisywało sie albo w konkretnym pliku, albo w programie.
Przykładem takim jest fragment kodu z makra, które pisałem z pomocą AI
Chyba, że są jakies ustawienia w Libre Office calc, co z automatu pisane makra zapisuje w dokumencie.
Jak wspomniałem wcześniej dla mnie makra to kosmos.

Dziękuje za wszelką pomoc.
Twoją i poprzedników sugestie umieściłem w testowym pliku. I szukam rozwiązania kolejnych błędów. Działa coraz lepiej.
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

Jeszcze raz podkreślam, że makro, które napisałem, znajduje się w pliku. Czyli każdy, kto otworzy plik, będzie miał dostęp do makra. Niczego nie trzeba kopiować. Jedynym ważnym zadaniem jest ustawienie zasad bezpieczeństwa uruchamiania makr, by makro mogło się w ogóle uruchamiać. W tym aspekcie takie ustawienia należy określić na każdym komputerze, na którym plik będzie otwierany. Na wszystkich innych komputerach plik może być obsługiwany, ale bez możliwości wysłania maila. W wersji LibreOffice 24+ makro przypisane do obiektu w dokumencie, w tym przypadku do przycisku, jest wskazywane przez zapis: Standard.Module1.Zawiadomienie (document, Basic). Standard — jest nazwą biblioteki w kontenerze, Module1 — jest nazwą modułu w tej bibliotece zawierającego makra, Zawiadomienie — jest nazwą podprogramu w module, document — mówi, że kontener znajduje się w dokumencie (application oznaczałoby, że w "Moje makra"), Basic — że skrypt jest napisany w Basicu.
Zapis, o jakim wspomniałeś, czyli .ScriptCode = "vnd.sun.star.script:Standard.Module1.SendEmailFromRow?language=Basic&location=document" jest stosowany przy przypisywaniu makra do działań dostępnych w oknie dialogowym "Dostosuj" (Narzędzia -> Dostosuj).
Mar i już pisze: śr mar 05, 2025 9:41 am Wiem, że są funkcje, aby makro zapisywało sie albo w konkretnym pliku, albo w programie.
Nie, takich funkcji nie ma. To autor makra decyduje, gdzie ono będzie zapisane. Jeśli zapisze je z plikiem, to może być uruchomione tylko po otwarciu pliku. Jeśli zapisze je w kontenerze "Moje makra", to makro być uruchomione jeśli kontener "Moje makra" w konkretnym komputerze zawiera kod tego makra. W tym sensie należy na każdym z nich do kontenera "Moje makra" skopiować to makro.
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jermor pisze: śr mar 05, 2025 2:27 pm Jeszcze raz podkreślam, że makro, które napisałem, znajduje się w pliku. Czyli każdy, kto otworzy plik, będzie miał dostęp do makra. Niczego nie trzeba kopiować. Jedynym ważnym zadaniem jest ustawienie zasad bezpieczeństwa uruchamiania makr, by makro mogło się w ogóle uruchamiać. W tym aspekcie takie ustawienia należy określić na każdym komputerze, na którym plik będzie otwierany. Na wszystkich innych komputerach plik może być obsługiwany, ale bez możliwości wysłania maila...
Dzięki za info, posprawdzam osobiście na wszystkich kompach wersję Libre oraz czy są wyłączone zabezpieczenia makr. Bo do tej pory przekazałem, żeby inni sprawdzili czy działa.
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

W związku z technologią obsługi zastanawiam się, czy masz jakieś "zabezpieczenie" przed wielokrotnym wysłaniem maila. Np. użytkownik1 wyśle maila przypominającego a dwa dni później uzytkownik2 także wyśle takiego maila, bo będzie widział, że zbliża się termin.
Tu praca może zależeć od tego czy plik jest używany w trybie współdzielenia arkusza, czy nie. W tym drugim trybie tylko jeden użytkownik może otworzyć plik i go edytować. Inni, którzy zechcą taki plik otworzyć podczas gdy został on już otwarty, będą mieli dostęp do pliku w trybie "Tylko do odczytu" albo "Otwórz jako kopię".
W pierwszym trybie kilku użytkowników może otwierać i używać pliku równolegle. Zaprogramowane są specjalne reguły zapisywania zmian dokonanych przez użytkowników uaktywniane podczas próby zapisu.
W tej sytuacji byłoby sensowne wstawianie w określoną komórkę znacznika, że mail został już wysłany. Musiałoby to realizować makro wysyłające. A sam znacznik po ustawieniu byłby widoczny np. do 30 dni przed upływem terminu a po minięciu tego okresu kasowany. Mógłby w ten sposób blokować przypadkową wysyłkę maila.
No ale to tylko takie propozycje.
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
Awatar użytkownika
Rafkus
Posty: 531
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Rafkus »

Mar i już pisze: pt lut 28, 2025 3:50 pm okazało sie, że makro nie jest umieszczone w pliku, tylko w programie.
Potwierdzam, że makra @Jermor są umiejscowione w danym pliku i mogą działać na różnych stanowiskach. Z tym że, w dostarczonych plikach 0_przypominajka o maile(...) są pozostawione (niepotrzebnie) trzy przyciski Wyślij @ wstawione ręcznie , których kliknięcie wywołuje makro zapisane na danym stanowisku. To one wołają o braku makra, ot taka oczywistość pozostawiona po twoich próbach - może tu tkwi twój problem.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Mar i już
Posty: 19
Rejestracja: pn lut 17, 2025 3:06 pm

Re: auto uzupełnianie danych + wysyłka @

Post autor: Mar i już »

Jermor pisze: śr mar 05, 2025 3:54 pm W związku z technologią obsługi zastanawiam się, czy masz jakieś "zabezpieczenie" przed wielokrotnym wysłaniem maila. Np. użytkownik1 wyśle maila przypominającego a dwa dni później uzytkownik2 także wyśle takiego maila, bo będzie widział, że zbliża się termin.
Tu praca może zależeć od tego czy plik jest używany w trybie współdzielenia arkusza, czy nie. W tym drugim trybie tylko jeden użytkownik może otworzyć plik i go edytować. Inni, którzy zechcą taki plik otworzyć podczas gdy został on już otwarty, będą mieli dostęp do pliku w trybie "Tylko do odczytu" albo "Otwórz jako kopię".
W pierwszym trybie kilku użytkowników może otwierać i używać pliku równolegle. Zaprogramowane są specjalne reguły zapisywania zmian dokonanych przez użytkowników uaktywniane podczas próby zapisu.
W tej sytuacji byłoby sensowne wstawianie w określoną komórkę znacznika, że mail został już wysłany. Musiałoby to realizować makro wysyłające. A sam znacznik po ustawieniu byłby widoczny np. do 30 dni przed upływem terminu a po minięciu tego okresu kasowany. Mógłby w ten sposób blokować przypadkową wysyłkę maila.
No ale to tylko takie propozycje.
Och, O takich problemach nie myślałem.
Jesli wyskoczy błąd, że plik jest otwarty gdzie indziej, to może i lepiej ;) następna osoba nie będzie dodawać do oryginalnego pliku w czasie kiedy ktos inny to robi. A to nie przeszkadza, by w razie co sprawdzić/przeglądać na kopii.
Ale z tym oznaczeniem, że juz został wysłany @ z przypomnieniem to tez ciekawy pomysł.
Na dzień dzisiejszy jestem zadowolony z tego co mam, co dzięki Wam udało sie zrobić. Ja tylko posklejałem ;) wymyslajac nowe problemy :)
Windows 10
LibreOffice 25.2.0.3.
Awatar użytkownika
Jermor
Posty: 2438
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: auto uzupełnianie danych + wysyłka @

Post autor: Jermor »

Wysyłam ci jeszcze bardziej zmodyfikowana wersję (3). Zmodyfikowałem twój arkusz w ten sposób, że usunąłem występujące w nim przyciski w wierszach kolumny U i tę kolumnę przeznaczyłem na oznakowanie, że mail został już wysłany, pojawia się w niej tekst "Wysłany".
Zmodyfikowałem makro w ten sposób, że po wysłaniu maila w komórce kolumny U we właściwym wierszu wstawiany jest tekst "Wysłany". Próba ponownego wysłania maila generuje komunikat "Mail został już wysłany".
Dopiero usunięcie wpisu w komórce kolumny U pozwoli wysłać maila.
Współpracownikom należałoby zakazać wysyłania maili jeśli wczytali plik jako "Tylko do odczytu" albo kopię. Dlaczego? W momencie kiedy wczytują taki plik, pobierają go w stanie, w jakim utrzymuje go pierwszy użytkownik. Może on w międzyczasie wysyłać powiadomienia, ale pozostali użytkownicy dowiedzą się o tym, dopiero gdy ten pierwszy zamknie swoją sesję, zapisując dane. Z kolei pierwszy użytkownik powinien kończyć sesję od razu po wykorzystaniu pliku. Jeśli zostawi go otwartym i pójdzie na przerwę, to w tym czasie nikt nie będzie mógł otworzyć go jako pierwszy.
Załączniki
0_przypominajka o maile w.3.ods
(78.06 KiB) Pobrany 15 razy
AOO 4.1.15, LO 24.8.5 (x64) na Windows 11 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.
ODPOWIEDZ