Strona 1 z 1

Makro na informację o zmianie wartości liczbowej w zakresie komórek

: sob sty 04, 2025 10:34 am
autor: divertalive
Witam,

kombinowałem, ale ciągle wyskakuje mi jakiś błąd... Czy ktoś mógłby pomóc w przygotowaniu makra jak w temacie? W pliku w komórkach N2:AE50 występują wartości liczbowe (1,2,3,4...), potrzebuję informacji w sytuacji, kiedy jakaś wartość liczbowa w komórce ulegnie zmianie np.

komórka N2 "wartość uległa zmianie; było 1, a jest 2"

W zdarzeniach dokumentu nie ma np. czegoś takiego jak "zmiana wartości".

Version: 24.8.4.2 (X86_64) / LibreOffice Community
Build ID: bb3cfa12c7b1bf994ecc5649a80400d06cd71002
CPU threads: 4; OS: Windows 10 X86_64 (10.0 build 19045); UI render: Skia/Raster; VCL: win
Locale: pl-PL (pl_PL); UI: pl-PL
Calc: CL threaded

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: sob sty 04, 2025 6:06 pm
autor: Jermor
Przeniosłem twój post do działu "Makra i programowanie". Dział "Base", w którym umieściłeś swój wpis, dotyczy baz danych.
Wracając do wpisu, nie bardzo rozumiem, do czego to makro ma służyć.
Zmiana wartości komórki może wystąpić z dwóch powodów: dokonania wpisu przez użytkownika arkusza albo przez przeliczenia formuły znajdującej się w komórce, spowodowanej zmianą zawartości komórek źródłowych.
Przypadek pierwszy jest możliwy do oprogramowania, ale chyba bezcelowy, bo wpisując nowe dane, widzisz jakie dane zastępujesz.
Przypadek drugi wymaga sprawdzania, czy zmieniła się którakolwiek z komórek źródłowych i na tej podstawie zadziałanie na komórce wynikowej.
W obu przypadkach należy uwzględnić fakt, że zmiana wartości może nastąpić poprzez wpisanie jej z klawiatury lub skopiowanie wartości z innej lokalizacji metodą "skopiuj i wklej".
A jeśli jak napisałeś
divertalive pisze: sob sty 04, 2025 10:34 am kombinowałem, ale ciągle wyskakuje mi jakiś błąd...
to pokaż, co próbowałeś zrobić.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: wt sty 07, 2025 10:07 am
autor: divertalive
Dzięki za przeniesienie i pomoc. W pracy mam 2 pliki, w jednym wpisuje w kolumnie B kto i za co zapłacił, wtedy pojawia się tam nazwisko. W pliku drugim z kolei, mam tabelkę do rozliczeń, wpisuje sobie tam kwoty umowy, kwoty wpłaty i dzięki temu bardziej kontroluje faktury. W podanym zakresie T2:AE50 znajdują się wartości liczbowe, które są równe ilości "nazwiska" w poprzednim pliku w kolumnie B. Jako, że nie tylko ja wprowadzam dane do kolumny B, chce być informowany jeżeli zmieni się wartość któregoś z moich klientów, wtedy jeszcze bardziej mogę pilnować sobie płatności klientów.

Kod: Zaznacz cały

Dim previousValues As Object

Sub MonitorChanges()
    Dim sheet As Object
    Dim cellRange As Object
    Dim currentValues As Object
    Dim row As Integer, col As Integer
    
    ' Pobierz arkusz i zakres monitorowanych komórek
    sheet = ThisComponent.Sheets(0) ' Pierwszy arkusz (indeks 0)
    cellRange = sheet.getCellRangeByName("T2:AE50")
    
    ' Jeśli to pierwsze uruchomienie, zapisz aktualne wartości
    If IsNull(previousValues) Then
        previousValues = cellRange.getDataArray()
        Exit Sub
    End If
    
    ' Pobierz aktualne wartości
    currentValues = cellRange.getDataArray()
    
    ' Sprawdź zmiany
    For row = LBound(currentValues) To UBound(currentValues)
        For col = LBound(currentValues(row)) To UBound(currentValues(row))
            If currentValues(row)(col) <> previousValues(row)(col) Then
                MsgBox "Zmiana w komórce " & cellRange.getCellByPosition(col, row).AbsoluteName & _
                       ": było " & previousValues(row)(col) & ", jest " & currentValues(row)(col), 64, "Zmiana wartości"
            End If
        Next col
    Next row
    
    ' Zaktualizuj zapamiętane wartości
    previousValues = currentValues
End Sub
Mam na przykład coś takiego, w zdarzeniach nie ma czegoś takiego jak "Zmiana wartości", przypisywałem do zdarzeń arkusza bo tam jest coś takiego jak zmiana wartości komórki, ale nie działa.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: śr sty 08, 2025 12:24 am
autor: Jermor
Przygotowałem ci przykładowy arkusz z makrami.
Żółty obszar w arkuszu ma przypisaną nazwę "zakres" i to w nim kontrolowane są zmiany zawartości komórek. Liczby, które widać w tym obszarze są wynikami formuł obliczeniowych wykonanych na liczbach z kolumny B i z pierwszego wiersza.
Makra zostały umieszczone w module "Listener"
Po załadowaniu skoroszytu należy uruchomić makro "Uruchom_Listener". Od tego momentu wszystkie zmiany wartości będą raportowane.
Aby zakończyć raportowanie, należy wykonać makro "Zamknij_Listener".

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: śr sty 08, 2025 11:37 am
autor: Jan_J
Uruchomienie makra da się przypisać wewnątrz dokumentu do zdarzenia jego otwarcia.
Być może ma to sens, jeśli śledzenie ma się odbywać w domyślnym trybie pracy.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: czw sty 09, 2025 1:20 pm
autor: divertalive
Jermor pisze: śr sty 08, 2025 12:24 am Przygotowałem ci przykładowy arkusz z makrami.
Żółty obszar w arkuszu ma przypisaną nazwę "zakres" i to w nim kontrolowane są zmiany zawartości komórek. Liczby, które widać w tym obszarze są wynikami formuł obliczeniowych wykonanych na liczbach z kolumny B i z pierwszego wiersza.
Makra zostały umieszczone w module "Listener"
Po załadowaniu skoroszytu należy uruchomić makro "Uruchom_Listener". Od tego momentu wszystkie zmiany wartości będą raportowane.
Aby zakończyć raportowanie, należy wykonać makro "Zamknij_Listener".
Bardzo dziękuję Ci za Twój poświęcony czas. Po uruchomieniu Listener, wyskakuje błąd:

Błąd uruchomieniowy języka BASIC.
Nie znaleziono właściwości lub metody: Cells.


Chciałem teraz zrobić przez "rejestrację zmian", ale problem z tym jest taki, że ja w komórce np. N2 mam formułę wpisaną, a wartość zmienia się automatycznie po wprowadzeniu zmian w kolumnie B w drugim pliku. "Rejestracja zmian" z tego co widzę bierze pod uwagę to co jest zapisane bezpośrednio w komórce, zamiast tą wartość z komórki. :/

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: czw sty 09, 2025 1:43 pm
autor: divertalive
https://zapodaj.net/plik-oK0yMkDYT4

1. Załóżmy, że w tym wyciętym fragmencie jest nazwisko "Nowak"

2. Mam takie coś w pliku "X", na zdjęciu jest sytuacja taka jakby w kolumnie B w pliku "Y" pojawiło już się raz nazwisko "Nowak", jak w kolumnie B, w pliku "Y" pojawi się w kolejnej komórce nazwisko "Nowak" to wartość liczbowa "1" zmieni się na "2".

To makro, które przygotowałeś działa, ale jeżeli zastoje je do tego pliku, to i tak po zmianie wartości w komórce nie wyświetla się komunikat. ;/

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: czw sty 09, 2025 2:08 pm
autor: divertalive
Mam na przykład taki kod makra z pomocą chatu gpt, ale też to nie działa. Wartość w komórce się zmienia, ale jak otwieram plik to nie wyskakuje komunikat.

Kod: Zaznacz cały

Sub ZapiszDaneZakresu()
    Dim oDoc As Object, oSheet As Object, oHiddenSheet As Object
    Dim oRange As Object, oData() As Variant
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' Arkusz główny
    oRange = oSheet.getCellRangeByName("N2:AE50")
    oData = oRange.getDataArray()

    ' Sprawdź, czy istnieje ukryty arkusz
    If Not oDoc.Sheets.hasByName("Poprzednie Dane") Then
        oHiddenSheet = oDoc.Sheets.createHiddenByName("Poprzednie Dane")
    Else
        oHiddenSheet = oDoc.Sheets.getByName("Poprzednie Dane")
    End If

    ' Zapisz dane do ukrytego arkusza
    oHiddenSheet.getCellRangeByName("A1:Z50").setDataArray(oData)
End Sub

Sub PorownajDaneZakresu()
    Dim oDoc As Object, oSheet As Object, oHiddenSheet As Object
    Dim oRange As Object, oOldRange As Object
    Dim oData() As Variant, oOldData() As Variant
    Dim i As Integer, j As Integer
    Dim msg As String

    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' Arkusz główny
    oRange = oSheet.getCellRangeByName("N2:AE50")
    oData = oRange.getDataArray()

    ' Sprawdź, czy istnieje ukryty arkusz
    If Not oDoc.Sheets.hasByName("Poprzednie Dane") Then Exit Sub
    oHiddenSheet = oDoc.Sheets.getByName("Poprzednie Dane")
    oOldRange = oHiddenSheet.getCellRangeByName("A1:Z50")
    oOldData = oOldRange.getDataArray()

    ' Porównaj dane
    msg = ""
    For i = LBound(oData) To UBound(oData)
        For j = LBound(oData(i)) To UBound(oData(i))
            If oData(i)(j) <> oOldData(i)(j) Then
                msg = msg & "Zmiana w komórce " & Chr(78 + j) & (2 + i) & ": było " _
                      & oOldData(i)(j) & ", jest " & oData(i)(j) & Chr(10)
            End If
        Next j
    Next i

    ' Wyświetl wyniki
    If msg <> "" Then
        MsgBox "Wykryto zmiany:" & Chr(10) & msg, 64, "Zmiany w danych"
    End If
End Sub

Sub OnDocumentLoad()
    PorownajDaneZakresu()
End Sub

Sub OnDocumentUnload()
    ZapiszDaneZakresu()
End Sub

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: czw sty 09, 2025 2:11 pm
autor: divertalive
Jan_J pisze: śr sty 08, 2025 11:37 am Uruchomienie makra da się przypisać wewnątrz dokumentu do zdarzenia jego otwarcia.
Być może ma to sens, jeśli śledzenie ma się odbywać w domyślnym trybie pracy.

Powyżej udostępniłem kod z próbą przypisania tych zdarzeń, ale dalej zong

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: czw sty 09, 2025 2:23 pm
autor: Jermor
U mnie nie są zgłaszane żadne błędy.
Jeśli jednak o nich piszesz, to powinieneś przekopiować podprogram do postu i podać, w której linii sygnalizowany jest błąd.
Po wystąpieniu błędu otwierany jest edytor Basica a wiersz, w którym raportowany jest błąd, jest podświetlony.
Zastanawia mnie także to, że komunikat dotyczy metody Cells a w moim oprogramowaniu taki ciąg liter nigdzie się nie pojawia.
Przy okazji sprawdziłem to rozwiązanie w Apache OpenOffice. Też działa bez problemu, ale jest realizowane inaczej.
W LibreOffice raport pojawia się przed zmianą wartości w komórce, natomiast w Apache raport wyświetlany jest po zmianie wartości, więc jego formuła jest myląca, gdyż brzmi "jest... będzie... ", podczas gdy w rzeczywistości zmiany już nastąpiły i powinien brzmieć "było... jest...".

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: czw sty 09, 2025 3:12 pm
autor: divertalive
Jermor pisze: czw sty 09, 2025 2:23 pm U mnie nie są zgłaszane żadne błędy.
Jeśli jednak o nich piszesz, to powinieneś przekopiować podprogram do postu i podać, w której linii sygnalizowany jest błąd.
Po wystąpieniu błędu otwierany jest edytor Basica a wiersz, w którym raportowany jest błąd, jest podświetlony.
Zastanawia mnie także to, że komunikat dotyczy metody Cells a w moim oprogramowaniu taki ciąg liter nigdzie się nie pojawia.
Przy okazji sprawdziłem to rozwiązanie w Apache OpenOffice. Też działa bez problemu, ale jest realizowane inaczej.
W LibreOffice raport pojawia się przed zmianą wartości w komórce, natomiast w Apache raport wyświetlany jest po zmianie wartości, więc jego formuła jest myląca, gdyż brzmi "jest... będzie... ", podczas gdy w rzeczywistości zmiany już nastąpiły i powinien brzmieć "było... jest...".
W edycji makr do arkusza ROZLICZENIA dodałem folder Standard, tam zrobiłem moduł "Sledzenie", do tego modułu dodałem Twoje makra, zapisałem. Uruchomiłem makro, wyłączyłem plik. Wprowadziłem zmiany w pliku "y" w kolumnie B, tak żeby w zakresie komórek zmieniła się gdzieś wartość liczbowa z 1 na 2 (czyli powiedzmy, że współpracownik wpisał jakąś wpłatę klienta o nazwisku Nowak). Wchodzę do tego pliku "x" z makrami --> otwieram --> wartość w komórce np. T2 zmieniła się z "1" na "2", ale nie wyskoczyło żadne powiadomienie --> uruchomiłem makro ale nic nie wyskoczyło --> zapisuje plik i zamykam, nie wyskakuje błąd. Tak to wygląda po kolei.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: czw sty 09, 2025 3:14 pm
autor: divertalive
divertalive pisze: czw sty 09, 2025 3:12 pm
Jermor pisze: czw sty 09, 2025 2:23 pm U mnie nie są zgłaszane żadne błędy.
Jeśli jednak o nich piszesz, to powinieneś przekopiować podprogram do postu i podać, w której linii sygnalizowany jest błąd.
Po wystąpieniu błędu otwierany jest edytor Basica a wiersz, w którym raportowany jest błąd, jest podświetlony.
Zastanawia mnie także to, że komunikat dotyczy metody Cells a w moim oprogramowaniu taki ciąg liter nigdzie się nie pojawia.
Przy okazji sprawdziłem to rozwiązanie w Apache OpenOffice. Też działa bez problemu, ale jest realizowane inaczej.
W LibreOffice raport pojawia się przed zmianą wartości w komórce, natomiast w Apache raport wyświetlany jest po zmianie wartości, więc jego formuła jest myląca, gdyż brzmi "jest... będzie... ", podczas gdy w rzeczywistości zmiany już nastąpiły i powinien brzmieć "było... jest...".
W edycji makr do arkusza ROZLICZENIA dodałem folder Standard, tam zrobiłem moduł "Sledzenie", do tego modułu dodałem Twoje makra, zapisałem. Uruchomiłem makro, wyłączyłem plik. Wprowadziłem zmiany w pliku "y" w kolumnie B, tak żeby w zakresie komórek zmieniła się gdzieś wartość liczbowa z 1 na 2 (czyli powiedzmy, że współpracownik wpisał jakąś wpłatę klienta o nazwisku Nowak). Wchodzę do tego pliku "x" z makrami --> otwieram --> wartość w komórce np. T2 zmieniła się z "1" na "2", ale nie wyskoczyło żadne powiadomienie --> uruchomiłem makro ale nic nie wyskoczyło --> zapisuje plik i zamykam, nie wyskakuje błąd. Tak to wygląda po kolei.
Zaznaczyłem zakres komórek N2:AE50 i nazwałem to zaznaczenie "zakres".

https://zapodaj.net/plik-e8ddzZrvEm tak to wygląda u mnie

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: czw sty 09, 2025 3:22 pm
autor: divertalive
Jermor pisze: czw sty 09, 2025 2:23 pm U mnie nie są zgłaszane żadne błędy.
Jeśli jednak o nich piszesz, to powinieneś przekopiować podprogram do postu i podać, w której linii sygnalizowany jest błąd.
Po wystąpieniu błędu otwierany jest edytor Basica a wiersz, w którym raportowany jest błąd, jest podświetlony.
Zastanawia mnie także to, że komunikat dotyczy metody Cells a w moim oprogramowaniu taki ciąg liter nigdzie się nie pojawia.
Przy okazji sprawdziłem to rozwiązanie w Apache OpenOffice. Też działa bez problemu, ale jest realizowane inaczej.
W LibreOffice raport pojawia się przed zmianą wartości w komórce, natomiast w Apache raport wyświetlany jest po zmianie wartości, więc jego formuła jest myląca, gdyż brzmi "jest... będzie... ", podczas gdy w rzeczywistości zmiany już nastąpiły i powinien brzmieć "było... jest...".
U Ciebie w pliku działa to świetnie, tylko wartość zmienia się ręcznie przez zmianę wartości liczbowej mnożnika.

(uruchamiam makro, zmieniam wartość mnożnika, makro informuje co będzie znajdowało się po zmianie mnożnika).

U mnie wartość zmienia się w po otwarciu pliku lub załadowaniu go ponownie.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: czw sty 09, 2025 7:05 pm
autor: Jermor
W tym właśnie tkwi problem. Gdy ładujesz (uruchamiasz) plik z arkuszem najpierw wykonują się wszystkie obliczenia. Więc gdy uruchamiasz makro, to dla niego, w arkuszu są "stare dane". By poprawnie to funkcjonowało, należałoby uruchamiać plik A przed uruchomieniem pliku B, plik A powinien pozostać otwarty do końca dnia, bez względu na to, czy plik B byłby zamykany i otwierany. Po ostatecznym zamknięciu pliku B należałoby zaktualizować dane i dopiero wówczas zamknąć plik A.
Nasuwa się pytanie, o co właściwie chodzi. Przedstawiłeś ten problem w taki sposób, że oczekujesz natychmiastowej reakcji na zmiany wynikające z działań wykonywanych na pliku B. Nie wiem, w jaki sposób przejmujesz dane. Jeśli korzystasz z łącza do danych lub funkcji DDE(), to dane są pobierane zawsze przy uruchamianiu pliku a później na żądanie. Więc to ty musisz wymusić ich pobranie, czyli być może nie trzeba tworzyć makra, które nasłuchuje czy nastąpiła zmiana, ale utworzyć rozwiązanie, które zobrazuje zaszłe zmiany od ostatniego oglądu.
Przedstawiam ci pomysł na podstawie przesłanego pliku.
Tym razem skoroszyt zawiera trzy arkusze.
"Bieżący" to ten, który zawiera dane pobierane z pliku B. W tym arkuszu formatowanie warunkowe wyróżnia wartości, które uległy zmianie. Zawiera także przycisk "Obejrzałem zmiany", do którego podpiąłem nagrane makro, kopiujące wartości z arkusza bieżącego do arkusza ukrytego.
"Różnice" to arkusz zawierający w odpowiadających komórkach, w których nastąpiły zmiany tekst "Jest tyle, Było tyle".
"Ukryty" zawierający ostatnią zatwierdzoną kopię.
Jeżeli w arkuszu bieżącym pojawi się wartość inna niż w jego kopii ("Ukryty"), wartość zostanie wyróżniona, a w arkuszu "Różnice" w odpowiadającej komórce pojawi się informacja.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: czw sty 09, 2025 8:53 pm
autor: Jan_J
Słowo Cells daje mi do myślenia, że zachodzi próba uruchomienia funkcji excelowskiego Basica.
Nie mam pewności, ponieważ jest to legalna nazwa i może być użyta gdziekolwiek. Jednak w VBA ta nazwa opisuje strukturę komórek na planszy skoroszytu.
Być może więc masz gdzieś przypisane uruchmienie nie tego makra co trzeba. Może nawet poza dokumentem.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: pt sty 10, 2025 11:41 am
autor: divertalive
Kurczę, nie wiem jak to dobrze wyjaśnić. Przygotowałem testowe dwa pliki z formułami takimi jakie mam. W "ROZLICZENIA Z KLIENTAMI" trzeba zmienić tylko lokalizację pliku żeby czytało z tego pliku STYCZEŃ 2025.ods

Najpierw zmiany zachodzą w pliku STYCZEŃ 2025 w kolumnie B, tam są zapisane i plik zamykany.

Potem odpalam plik ROZLICZENIA Z KLIENTAMI, tam po otwarciu aktualizują się wartości w komórkach. Jeżeli w pliku STYCZEŃ "Nowak" będzie 3x to w pliku ROZLICZENIA Z KLIENTAMI w danej komórce zamiast np. 0 będzie 3.

Chciałbym żeby oprócz tego, że po uruchomieniu pliku ROZLICZENIA Z KLIENTAMI zmieniała się wartość to żeby jeszcze mnie informowało gdzie się zmieniło coś, że na przykład Nowaków w kolumnie B było dwóch, a został dopisany jeszcze jeden więc zmieniło się z 2 na 3.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: pt sty 10, 2025 11:53 am
autor: divertalive
U mnie w przypadku plików które wysłałem do testowania ścieżka do pliku styczeń 2025 to : =SUMA(JEŻELI(CZY.LICZBA(SZUKAJ.TEKST(M2;PODSTAW(PODSTAW(PODSTAW(PODSTAW(PODSTAW(PODSTAW(PODSTAW(PODSTAW(PODSTAW(LITERY.MAŁE('file:///C:/Users/Dell/Desktop/TEST/STYCZEŃ 2025.ods'#$Arkusz1.B$1:B$300);"ą";"a"); "ć";"c");"ę";"e");"ł";"l");"ń";"n");"ó";"o");"ś";"s");"ź";"z");"ż";"z"))); 1; 0))

Po tym jak to wkleje, wciskam (CTRL+SHIFT+ENTER)

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: pt sty 10, 2025 10:06 pm
autor: Jermor
W tym problemie jest wiele wątków do rozwiązania. Wynikają one, jak sądzę, z nieprzemyślanego podejścia do tematu.
Jak chociażby hardcorowa formuła podmieniająca wszystkie polskie litery na łacińskie odpowiedniki. Chodziło zapewne o to, aby uniknąć błędnych obliczeń gdy ktoś jednak niechcący wpisze "s" zamiast "ś" i nazwisko nie zostanie rozpoznane.
Tutaj raczej należałoby zapewnić, że dane (nazwisko) klienta zawsze zostaną wprowadzone prawidłowo.
Zakładam, że plik "Rozliczenia z klientami" zawiera w kolumnie "Imię i nazwisko" identyfikacje jednego klienta. Czyli kolumna ta zawiera niepowtarzające się dane klientów. I nowego klienta najpierw wpisuje się do tego pliku.
Tu zresztą pojawia się kolejny problem. Nazwisko Nowak, jakie podałeś w przykładzie, jest akurat najczęściej występującym nazwiskiem w Polsce. Nietrudno zatem wyobrazić sobie, że wśród klientów pojawić się może kilku Nowaków, Jabłonowskich czy Kowalskich. Do wyszukiwania klienta służy wyłącznie nazwisko (na dodatek z podmienionymi polskimi literami). Jak zatem odróżnić od siebie osoby o nazwiskach np. Kopeć i Kopec, albo Jan Kopec i Paulina Kopec? Stąd wniosek, że należałoby identyfikować klienta także przez imię, które notabene także może się powtórzyć. Najlepiej byłoby jednak identyfikować klienta przez indywidualny identyfikator. Pomijając jednak ten fakt, jeśli plik rozliczeniowy zawiera pełny wykaz klientów, to dlaczego nie wprowadzić do pliku "Styczeń 2025" i dalszych mu odpowiadających, sprawdzania poprawności danych, poprzez możliwość wyboru klienta tylko z rozwijanej listy? Wówczas na pewno zostanie wprowadzony tylko tekst zgodny z oficjalnym wykazem. A to z kolei oznacza, że nie trzeba będzie wyodrębniać i przekształcać pojedynczego nazwiska.
Powiązania między plikami realizowane są poprzez formułę łącznikową w postaci 'file:///ścieżka dostępu/plik.ods'#Arkusz1.adres. Ten sposób oznacza, że dane są pobierane tylko w momencie otwierania pliku a później wyłącznie na żądanie. Z twego opisu wynika, że "Rozliczenia z klientami" będą otwierane dopiero po zamknięciu pliku "miesiąc rok". To oznacza, że potrzebne będzie tylko jednokrotne połączenie z danymi zewnętrznymi.
Taki scenariusz preferuje rozwiązanie zaproponowane w mojej drugiej propozycji.
Sama formuła obliczająca liczbę wystąpień klienta (w pliku "Rozliczenia...") jest dużo prostsza i może wyglądać tak:
=LICZ.JEŻELI('file:///ścieżka do pliku/STYCZEŃ 2025.ods'#$Arkusz1.$B$2:$B$277;C2). Zwróć uwagę na to, że możesz wyszukiwać pełne ciągi, bo w pliku "Styczeń 2025" nazwy klienta są na pewno zgodne z tymi zapisanymi w pliku "Rozliczenia...".
Zostawiam ci to pod rozwagę.
Piszesz, że używasz najnowszego LO, już od dawna jest w nim funkcja REGEX(), o której zamieściłem informacje na forum. By wyodrębnić nazwisko klienta, można skorzystać właśnie z niej. W taki sposób REGEX(C2;"\w+$"). Wrażenie regularne oznacza: wyodrebnij ostatni wyraz znajdujący się w komórce C2.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: wt sty 14, 2025 4:32 pm
autor: divertalive
https://zapodaj.net/plik-kSmQRYfWpU

Po wpisaniu funkcji =LICZ.JEŻELI formuła nie zlicza ilość "Nowak" występujących w kolumnie B.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: wt sty 14, 2025 9:47 pm
autor: Jan_J
Super;
pokazałbyś jeszcze czego szukasz (tzn. wartość komórki C2, bo akurat jej nie widać)
a także gdzie szukasz (tj. choćby fragment kolumny B z pliku "/Users/Dell/Desktop/TEST/STYCZEŃ 2025.ods")

Nieprawidłowe działanie tak prostej formuły jest możliwe, ale bardzo mało prawdopodobne. Raczej chodzi o niezrozumienie sposobu jej użycia.

Dodatkowo,
* załączniki w postaci obrazków w standardowych formatach lepiej jest wstawiać bezpośrednio do postu niż na zewnętrzne serwisy;
* lepiej jest unikać załączników graficznych na korzyść formatów dających możliwosć sprawdzenia przyczyn — w tym przypadku .ods.

Re: Makro na informację o zmianie wartości liczbowej w zakresie komórek

: śr sty 29, 2025 4:40 pm
autor: Papas22
divertalive pisze: sob sty 04, 2025 10:34 am Witam,

kombinowałem, ale ciągle wyskakuje mi jakiś błąd... Czy ktoś mógłby pomóc w przygotowaniu makra jak w temacie? W pliku w komórkach N2:AE50 występują wartości liczbowe (1,2,3,4...), potrzebuję informacji w sytuacji, kiedy jakaś wartość liczbowa w komórce ulegnie zmianie np.

komórka N2 "wartość uległa zmianie; było 1, a jest 2"

W zdarzeniach dokumentu nie ma np. czegoś takiego jak "zmiana wartości".

Version: 24.8.4.2 (X86_64) / LibreOffice Community
Build ID: bb3cfa12c7b1bf994ecc5649a80400d06cd71002
CPU threads: 4; OS: Windows 10 X86_64 (10.0 build 19045); UI render: Skia/Raster; VCL: win
Locale: pl-PL (pl_PL); UI: pl-PL
Calc: CL threaded
Możesz użyć makra z `CellValueChanged` do porównania starej i nowej wartości. kod:

```basic
Sub OnCellValueChanged(oEvent As Object)
Dim oCell As Object
oCell = oEvent.Source
If oCell.getValue() <> oCell.getOldValue() Then
MsgBox "Wartość w " & oCell.AbsoluteName & " zmieniła się: było " & oCell.getOldValue() & ", a jest " & oCell.getValue()
End If
End Sub
```

To porównuje wartości i wyświetla komunikat, gdy coś się zmieni.