makro liczenie kolorów [SOLVED]

Użytkowanie arkusza kalkulacyjnego
gn21
Posty: 6
Rejestracja: śr mar 04, 2020 9:16 am

makro liczenie kolorów [SOLVED]

Post autor: gn21 »

witam
mialem zrobione makro do arkusza do liczenia liter z odpowiednimi kolorami ne excelu, no niestety po zmianie firmy pracuje na openoffice 3.3 czy moglbym prosic o przerobienie tego
z góry dziękuje za pomoc

Kod: Zaznacz cały

Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Function LICZ_KOLOR2(Pattern As Range, Data As String, ParamArray x())
Dim i As Byte, j As Byte
Dim Item
   Application.Volatile
   LICZ_KOLOR2 = 0
   For Each Item In x()
      If IsArray(Item) Then
         If IsObject(Item) Then
            For i = 1 To Item.Rows.Count
               For j = 1 To Item.Columns.Count
                  If Item(i, j).Font.Color = Pattern.Interior.Color And _
                     (Item(i, j).Value = Data Or Data = "") Then
                     LICZ_KOLOR2 = LICZ_KOLOR2 + 1
                  End If
               Next j
            Next i
         End If
      Else
      If IsObject(Item) Then
         If Item.Font.Color = Pattern.Interior.Color And _
            (Item.Value = Data Or Data = "") Then
            LICZ_KOLOR2 = LICZ_KOLOR2 + 1
         End If
      End If
   End If
   Next Item
End Function
Załączniki
grafiki 2020 04.xls
(107 KiB) Pobrany 126 razy
Ostatnio zmieniony wt mar 10, 2020 8:28 am przez gn21, łącznie zmieniany 2 razy.
OpenOffice 3.3 na WINDOWS 10 Pro
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: makro liczenie kolorów

Post autor: Jan_J »

Co to jest `odpowiedni kolor`?
Funkcja przyjmuje 3 parametry:

1. Pattern, będący zakresem arkusza.
2. Data, będący łańcuchem znaków,
3. ParamArray, będący tablicą obiektów, nie używany w ciele funkcji.

Ad 1. Pattern ma być zakresem, ale wykorzystywany jest jedynie do pobrania koloru jego tła. Takie użycie parametru w funkcji Calca nie jest możliwe (dotyczy to funkcji napisanych w Basicu, przeznaczonych do wykorzystywania w formułach). A to dlatego że funkcja w formule nie dostaje adresów komórek i zakresów, ani nawet referencji do komórek i zakresów, tylko tablice pobranych wartości. Zaś wartości te nie posiadają atrybutów, bo nie są obiektami tylko danymi prostymi.

Z drugiej strony konieczność przekazania referencji do obszaru tylko po to żeby pobrać jego kolor tła ogranicza wykorzystanie funkcji. Nie da się powiedzieć `zlicz czarne`; trzeba zdefiniować jakiś obszar z czarnym tłem i powiedzieć: `zlicz takie jak tło tego obszaru`. To jest (drobny) błąd projektowy, którego nie warto powielać po reimplementacji.

Ad 2. Parametr Data służy jako kryterium filtrowania zliczanych komórek.

Czy mógłbyś wyjaśnić w 2-3 zdaniach, co Twoja funkcja miałaby zliczać?
Prawdopodobnie jest to liczba komórek z danego obszaru, których kolor tekstu jest taki, jak kolor tła tego obszaru, i jednocześnie albo pustych, albo zawierających zadany tekst. Czy tak?

Z dostępem do koloru tekstu w komórkach będzie ten sam problem konstrukcyjny co opisałem wyżej. Są możliwe różne tricki, dzięki którym funkcja dostanie ADRES obszaru zamiast TABLICY pobranych z niego wartości.

Tyle umiem napisać na szybko, po 10-minutowej analizie problemu.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
gn21
Posty: 6
Rejestracja: śr mar 04, 2020 9:16 am

Re: makro liczenie kolorów

Post autor: gn21 »

ogólnie chodzi o to że przy robieniu grafiku określone osoby w danym dniu mają okreslone stanowiska
potrzebuje kierowców konwojentów magazynierów i te osoby zaznaczam odpowiednimi kolorami np
D (kolor czcionki czerwony) magazynier, D (kolor czcionki zielony) kierowca i jak mi zliczy te kolory
to wiem że w jednym dniu mam dwóch kierowców a np żadnego magazyniera i w excelu bardzo mi to ulatwiało sprawę
OpenOffice 3.3 na WINDOWS 10 Pro
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: makro liczenie kolorów

Post autor: Jermor »

Osobiście porzuciłbym projekt z własnymi funkcjami. Z opisu wynika, że najprościej byłoby przypisać symbole konkretnym zawodom np. K - kierowca, M - magazynier, O - ochroniarz itd. Jeśli kolory są ważne, obudować komórki formułami warunkowymi. Zliczanie takich osób nie stanowi problemu.
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.
gn21
Posty: 6
Rejestracja: śr mar 04, 2020 9:16 am

Re: makro liczenie kolorów

Post autor: gn21 »

kolory są dość ważne bo nie da się przypisać odpowiednim osobom symboli ponieważ w komórce zaznaczam czy są na dniówce D czy nocce n i dlatego miałem kolor litery D i N :(
OpenOffice 3.3 na WINDOWS 10 Pro
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: makro liczenie kolorów

Post autor: Jermor »

Mimo wszystko dałoby się to zrobić może nieco modyfikując projekt. Jednak najpierw napisz jakiego programu używasz rzeczywiście. W stopce podajesz OpenOffice 3.3, wersję sprzed wielu wielu lat. Obecnie aktualną wersją jest Apache OpenOffice 4.1.7 oraz odpowiadający (i myślę, że nieco bogatszy w możliwości) inny pakiet biurowy, LibreOffice 6.3.4.
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.
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: makro liczenie kolorów

Post autor: Jermor »

Twój plik excelowy nie jest łatwy do zorientowania się co i jak ma zostać przedstawione. Pomijając jednak to, podsyłam ci go, już przekształcony do formatu ods, podmieniając w nim obliczenia kolorów w taki sposób, że wykorzystuję symbole dwuliterowe. Pierwsza litera, D lub N, oznacza Dzień albo Noc, druga litera: D, K lub M, to oznaczenie które wpisałeś obok kolorów podstawowych, oznaczająca prawdopodobnie zawód pracownika.
Tak, zauważyłem, że w oryginalnym pliku wpisywane mogły być symbole DN ( a przynajmniej używane formuły to uwzględniają) ale ponieważ nie wiem o tym nic, to tylko chciałem pokazać możliwości adaptacji do nowej sytuacji. Poprawiłem tylko formuły w kolumnie H.
Poprawne działanie wymaga aby w opcjach programu Calc włączona była opcja "Włącz wyrażenia regularne w formułach". Przekształciłem bowiem wyrażenia z symbolami wieloznacznymi (Excel tylko takich używa) w wyrażenia regularne. Akurat Apache OpenOffice tylko takie dopuszcza. LibreOffice pozwala zamiennie korzystać z symboli wieloznacznych, ale ty napisałeś, że masz Apache OpenOffice.
Trzeba także przejrzeć formuły pod kątem symboli wieloznacznych, a jest ich trochę, także w ukrytych kolumnach.
Załączniki
gn21 grafiki 2020 04.ods
(32.66 KiB) Pobrany 122 razy
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.
gn21
Posty: 6
Rejestracja: śr mar 04, 2020 9:16 am

Re: makro liczenie kolorów

Post autor: gn21 »

bardzo dziekuje :) jeżeli nie znajdę innego rozwiązania to skorzystam z tego rozwiązania choć jest bardziej pracochłonne, mam tez nadzieje że firma po naszych interwencjach zainstaluje jakiś inny pakiet, ale też fajne rozwiązanie i jeszcze raz dziękuje, przynajmniej w razie czego jest na czym pracować :)
OpenOffice 3.3 na WINDOWS 10 Pro
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: makro liczenie kolorów

Post autor: Jermor »

No dobrze. Jeszcze raz podsyłam ci twój plik. Usunąłem z niego makra Excela. Funkcja LICZ_KOLOR2 występowała tylko w sześciu wierszach. Zastąpiłem ją wspomnianą już formułą analizującą kody dwuliterowe. Ponadto Dla obszaru od H10 do AL54 zdefiniowałem sprawdzanie poprawności danych, na podstawie dopuszczalnej listy. Gdy klikniesz w komórkę w tym obszarze, pojawi się przycisk rozwijanej listy, z której możesz wybrać rodzaj służby.
Nie wiem tylko do czego w poprzedniej wersji służył kod DN, więc tu jest on ignorowany. Ponadto poprawiłem formuły (ukryte) analizujące służby nocne i dzienne.
W pozostałym zakresie arkusz powinien ci działać tak jak poprzedni.
Załączniki
gn21 grafiki 2020 04.ods
(29.03 KiB) Pobrany 129 razy
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.
gn21
Posty: 6
Rejestracja: śr mar 04, 2020 9:16 am

Re: makro liczenie kolorów

Post autor: gn21 »

no własnie dlatego były kolory bo wpisywalem D, N lub DN jak ktoś pracował 24h a potem zaznaczalem kolorem te litery w komórkach ale teraz i tak jest lepiej niz przedtem :)
OpenOffice 3.3 na WINDOWS 10 Pro
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: makro liczenie kolorów

Post autor: Jermor »

Wobec tego podsyłam ostatnią modyfikację. Dołożyłem trzeci pierwszy symbol. Jest nim cyfra 2 (dwie zmiany) i oznacza, że służba jest 24 godzinna. Zapis np. 2K zostanie wliczony zarówno do dnia jak i nocy, czyli tak jak w poprzedniej wersji DN. Na rozwijanej liście dodałem te trzy nowe kody (2D, 2K i 2M). Dołożyłem ci też formatowanie warunkowe, które te znaki kodów automatycznie przekształci na kolor uzależniony od ostatniej litery tego kodu.
Powodzenia!
Załączniki
gn21 grafiki 2020 04 A.ods
(29.32 KiB) Pobrany 114 razy
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.
gn21
Posty: 6
Rejestracja: śr mar 04, 2020 9:16 am

Re: makro liczenie kolorów

Post autor: gn21 »

jeszcze raz bardzo dziekuje :) myślę że na tą chwilę i ten system problem jest rozwiazany , odezwe się gdy ewentualnie zmienią nam na libre lub cos w tym rodzaju :)
OpenOffice 3.3 na WINDOWS 10 Pro
ODPOWIEDZ