Strona 1 z 1

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

: pt mar 18, 2016 4:40 pm
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

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

: pt mar 18, 2016 6:14 pm
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.

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

: czw mar 31, 2016 1:26 pm
autor: jazzti
Dziękuję uprzejmie za pomoc.