Makro Calc wklejające formułę z wieloma cudzysłowami

Użytkowanie arkusza kalkulacyjnego
jazzti
Posty: 8
Rejestracja: pt wrz 04, 2015 9:28 am

Makro Calc wklejające formułę z wieloma cudzysłowami

Post autor: jazzti »

Witam wszystkich!
Dopiero zaczynam przygodę z Calc, więc proszę o dużo wyrozumiałości. Zarejestrowałam makro, które wkleja wartość formuły. Dla formuł typu „=a1+a2” działa oczywiście poprawnie. Problem w tym, że moja formuła ma wiele cudzysłowów, tj. =JEŻELI(C12="Podaj typ";" ";JEŻELI(C12="zgłoszenie";"gwarant";JEŻELI(C12="zapytanie";"inne";C12))).
Wykonanie makra powoduje wyświetlanie komunikatu "nieoczekiwany symbol zg.", czyli makro czyta wszystko między dwoma pierwszymi cudzysłowami i nie widzi polskich liter (gdy nie ma polskich liter, to wyskakuje komunikat "nieoczekiwana wartość" ).
Proszę o podpowiedź jak to obejść. Byłoby miło gdyby tłumaczenie było łopatologiczne.

Formularz działa na zasadzie domina/schematu blokowego, a to makro ma „zerować” startowe wybrane komórki poprzez wpisanie tej pierwszej formuły.

sub jezeli
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "=JEŻELI(C12="Podaj typ";" ";JEŻELI(C12="zgłoszenie";"gwarant";JEŻELI(C12="zapytanie";"inne";C12)))"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())


end sub

Z góry dziękuję za pomoc, pozdrawiawm
OpenOffice 4.1.1 na Windows 7
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Makro Calc wklejające formułę z wieloma cudzysłowami

Post autor: belstar »

jazzti pisze:Dopiero zaczynam przygodę z Calc, więc proszę o dużo wyrozumiałości. Zarejestrowałam makro, które wkleja wartość formuły.
Na początek nie rejestruj makr, bo to zły nawyk i niczego się nie nauczysz. Poczytaj tu.
Spójrz jaki masz długi kod, względem wykorzystującego API.

Kod: Zaznacz cały

Sub WstawFormule
	Dim Doc As Object
	Dim Sheet As Object
	Dim Cell As Object   
	 
	Doc = ThisComponent
	Sheet = Doc.Sheets(0)'Pierwszy arkusz z lewej 
	Cell = Sheet.getCellRangeByName("C7")
	Cell.FormulaLocal ="=JEŻELI(C12=""Podaj typ"";"" "";JEŻELI(C12=""zgłoszenie"";""gwarant"";JEŻELI(C12=""zapytanie"";""inne"";C12)))"
	'Poniżejwersja używająca wewnętrznych nazw funkcji, ważna jeśli używasz różnych lokalizacji
	Cell.Formula ="=IF(C12=""Podaj typ"";"" "";IF(C12=""zgłoszenie"";""gwarant"";IF(C12=""zapytanie"";""inne"";C12)))"
End Sub
Zaś co tyczy się cudzysłowów to trzeba je podwoić tam gdzie występują w środku stringu.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
jazzti
Posty: 8
Rejestracja: pt wrz 04, 2015 9:28 am

Re: Makro Calc wklejające formułę z wieloma cudzysłowami

Post autor: jazzti »

Dziękuję uprzejmie za pomoc.
OpenOffice 4.1.1 na Windows 7
ODPOWIEDZ