Jestem tu nowy więc witam wszystkich. Z programem calc mam doświadczenie od wielu lat, liznąłem też trochę programowania w pythonie, C, C#, natomiast problem makr i BASICa z Office mnie rozłożył na łopatki. Próbowałem wszystkiego i na nic, szukałem w internecie, na forach polskich, angielskich a nawet hiszpańskich i nic nie działa.
Otóż problem jest taki, że Calc w ogóle nie nagrywa makra formatowania warunkowego. Wszystko co do tej pory robiłem nagrywał bez problemu, natomiast tu wywala tylko coś takiego:
Kod: Zaznacz cały
rem dispatcher.executeDispatch(document, ".uno:ConditionalFormatDialog", "", 0, Array())
To jeszcze nic, oczywiście zdaje się to być ograniczeniem samego programu Calc, który nie potrafi nagrać jakie pola w okienku formatowania warunkowego zaznaczam i wypełniam, tak więc zabrałem się za próby napisania czegoś w BASICu, bo wyglądało to mało skomplikowanie, natomiast poległem z kretesem i nic co udało mi się wyczytać, że działa innym ludziom, u mnie nie zadziałało. Zawsze wywala jakiś błąd składni, jakąś nieznaną metodę czy inne dziwne komunikaty, mimo iż wszystko wygląda mi na poprawne.
Kod, który podobno działa, znaleziony na Hiszpańskim forum, wygląda tak:
Kod: Zaznacz cały
sub formatowanie_warunkowe
Dim Doc, hoja, celda as Object
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:ConditionalFormatDialog", "", 0, Array())
Dim Conditions(2) as New com.sun.star.beans.PropertyValue
Doc = ThisComponent
hoja = Doc.Sheets.getByName("Zamów tutaj")
celda = hoja.getCellRangeByName("E2:E5216")
Form = celda.ConditionalFormat
Conditions(0).Name = "Operator"
Conditions(0).Value = com.sun.star.sheet.ConditionOperator.EQUAL
Conditions(1).Name = "Formula1"
Conditions(1).Value = "ZAMÓW"
Conditions(2).Name = "StyleName"
Conditions(2).Value = "Zły"
Form.addNew(Conditions)
Conditions(0).Name = "Operator"
Conditions(0).Value = com.sun.star.sheet.ConditionOperator.EQUAL
Conditions(1).Name = "Formula1"
Conditions(1).Value = "NA STANIE"
Conditions(2).Name = "StyleName"
Conditions(2).Value = "Dobry"
Form.addNew(Conditions)
celda.ConditionalFormat = Form
end sub
Próbowałem też innych kodów, nic nie działa, zawsze wywala, że BASIC czegoś nie rozumie, nawet jak kopiuję kod 1:1 z miejsca gdzie ludzie piszą, że działa. Zależy mi, aby zrobić makro, które zaznacza odpowiedni zakres komórek zaczynając od wyznaczonej komórki (ctrl+dół, prawo, ctrl+shift+góra) oraz zastosował formatowanie warunkowe, że jeżeli komórka zawiera "słowo1" zastosuj styl "Zły", jeżeli zawiera "słowo2", zastosuj styl "Dobry".