MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA
MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA
Cześć, używałem do tego czasu arkusza do ewidencji czasu pracy. Zliczał mi godziny zwykle/nadliczbowe, soboty, L4, urlopy, opieki itp. Do tego wszystko się ładnie kolorowało za pomocą formatowania warunkowego. Od pewnego czasu mam problem z pracą na pliku, ponieważ znikają kolory z formatowania warunkowego. Czy da się kolorować komórkę przy użyciu makra? Miałoby to działać na zasadzie że jeżeli wartość komórki jest np. "U" to pokoloruj tło komórki na jakiś tam kolor lub zastosuj jakiś styl. Mam makro które się tak zachowuje. ale działa tylko w przypadku gdy w komórce jest wartość liczbowa. Jeżeli mam tekst to tak jakby nie działało. Dodam że plik znajduje się na dysku sieciowym i problem formatowania wynika prawdopodobnie z pracy na pliku z różnych systemów i wersji programu. Zakładam, że makro mogłoby rozwiązać problem niestety nie mam pojęcia jak się za nie zabrać. Czy ktoś mógłby podpowiedzieć od czego zacząć ?
LibreOffice 6.1 na Windows 10
Re: MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA
Potwierdzamna pliku z różnych systemów i wersji programu
czasem pracuję na zestawieniach z układami kilkunastu/kilkudziesięciu warunków formatowania warunkowego, działającymi w kilku tysiącach komórek.
Starsze wersje Libre Calc narzekają na zbytnią komplikację układów warunków, a Excel ignoruje niektóre z nich, dość przypadkowo zresztą.
Ale w przypadku makr zgodności Calca z Excel tym bardziej nie będzie. Z wersjami Calca już prędzej.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA
Plik działa w różnych wersjach LO czy OO. Nie jest używany na Excellu. Próbowałem kolorowania typu:
Sub Koloruj
for k = 1 to 6
For w = 1 To 31
Cell = ThisComponent.Sheets(0).getCellByPosition(k,w)
v = Cell.value
With ThisComponent.Sheets(1)
If v = "10" Then
Cell.CellBackColor = .getCellRangeByName("B1").CellBackColor
ElseIf v = 20 Then
Cell.CellBackColor = .getCellRangeByName("B2").CellBackColor
End If
End With
Next w
next k
End Sub
Koloruje wszystko ładnie na każdym komputerze. Niestety przyjmuje tylko wartości liczbowe w przeciwnym razie zwraca błąd w makro (np. v="U" lub inną wartość literową to coś się wysypuje). Jak zadeklarować zmienną v żeby działała nie tylko na liczbach?
Sub Koloruj
for k = 1 to 6
For w = 1 To 31
Cell = ThisComponent.Sheets(0).getCellByPosition(k,w)
v = Cell.value
With ThisComponent.Sheets(1)
If v = "10" Then
Cell.CellBackColor = .getCellRangeByName("B1").CellBackColor
ElseIf v = 20 Then
Cell.CellBackColor = .getCellRangeByName("B2").CellBackColor
End If
End With
Next w
next k
End Sub
Koloruje wszystko ładnie na każdym komputerze. Niestety przyjmuje tylko wartości liczbowe w przeciwnym razie zwraca błąd w makro (np. v="U" lub inną wartość literową to coś się wysypuje). Jak zadeklarować zmienną v żeby działała nie tylko na liczbach?
LibreOffice 6.1 na Windows 10
Re: MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA
// zatwierdziłem post z pytaniem o format pliku roboczego (xls czy ods) -- i znikł. W logach stoi, że został zaakceptowany.
No więc format obcy może być przyczyną problemów. Odczyt i zapis następują przez dodatkowe filtry, które mogą się zmieniać z wersji na wersję oprogramowania, powodując niezgodności. Dwa, że "pojemność" takiego obcego formatu (np. liczba warunków w formatowaniu, liczba wierszy w arkuszu itp.) może być inna niż możliwości oprogramowania. Dotyczy to także zapisu makr w skoroszycie.
Dlatego przed decyzją o użyciu makra sugerowałbym zmianę formatu na ods i sprawdzenie, czy różnice w wersjach Calca nie przeszkadzają. Nie powinny.
No więc format obcy może być przyczyną problemów. Odczyt i zapis następują przez dodatkowe filtry, które mogą się zmieniać z wersji na wersję oprogramowania, powodując niezgodności. Dwa, że "pojemność" takiego obcego formatu (np. liczba warunków w formatowaniu, liczba wierszy w arkuszu itp.) może być inna niż możliwości oprogramowania. Dotyczy to także zapisu makr w skoroszycie.
Dlatego przed decyzją o użyciu makra sugerowałbym zmianę formatu na ods i sprawdzenie, czy różnice w wersjach Calca nie przeszkadzają. Nie powinny.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA
Ad makro rozpoznające typ zawartości komórki. Przypisane do obiektu komórki metody
getString() pobiera tekst wyświetlany w komórce (nawet jeśli jest w niej liczba lub formuła);
getValue() pobiera z niej wartość wynikową (jeżeli nie ma tam liczby, pobierze 0);
getFormula() pobiera tekst formuły;
getType() pobiera numeryczny kod typu zawartości komórki:
0: pusta,
1: liczba,
2: tekst,
3: formuła.
Np.
Patrz
https://www.openoffice.org/api/docs/com ... XCell.html
https://www.openoffice.org/api/docs/com ... tType.html
(dokumentacja jest raczej trudna w lekturze).
getString() pobiera tekst wyświetlany w komórce (nawet jeśli jest w niej liczba lub formuła);
getValue() pobiera z niej wartość wynikową (jeżeli nie ma tam liczby, pobierze 0);
getFormula() pobiera tekst formuły;
getType() pobiera numeryczny kod typu zawartości komórki:
0: pusta,
1: liczba,
2: tekst,
3: formuła.
Np.
Kod: Zaznacz cały
d = ThisComponent
s = g.Sheets.getByIndex(0)
c = s.getCellByPosition(0, 0)
napis = c.getString()
liczba = c.getValue()
typ = c.getType()
https://www.openoffice.org/api/docs/com ... XCell.html
https://www.openoffice.org/api/docs/com ... tType.html
(dokumentacja jest raczej trudna w lekturze).
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA
Dzięki za pomoc. getString() działa mi poprawnie. Sprawdziłem też zapis do *.ods, również rozwiązuje wszystkie problemy ze znikaniem formatowania warunkowego. Zostanę chyba przy wersji bez makro.
LibreOffice 6.1 na Windows 10