Co zrobić, jeśli funkcja jest dostępna w arkuszu, ale nie jest dostępna w makrach?: Różnice pomiędzy wersjami
Przejdź do nawigacji
Przejdź do wyszukiwania
m (1 wersja) |
|||
Linia 58: | Linia 58: | ||
− | [[LibreOffice Calc – makra | <b>LibreOffice Calc – makra</b>]] [[Henryk Dąbrowski | <b>Strona główna</b>]] | + | [[LibreOffice Calc – makra – przykłady | <b>LibreOffice Calc – makra – przykłady</b>]] [[Henryk Dąbrowski | <b>Strona główna</b>]] |
Aktualna wersja na dzień 16:19, 24 maj 2024
11.07.2020
Wiele funkcji jest dostępnych w arkuszu (np. LOG10() lub EASTERSUNDAY() - w polskiej wersji WIELKANOC()), ale nie są dostępne w makrach. Wywołanie takich funkcji jest możliwe, ale jest bardziej skomplikowane. Przykładowo:
Function myLog10(x as Double) as Double
'oblicza logarytm o podstawie 10
Dim oFuncAcc as Object
oFuncAcc = CreateUnoService("com.sun.star.sheet.FunctionAccess")
myLog10 = oFuncAcc.callFunction( "LOG10", Array(x) )
'UWAGA: funkcja Array() tworzy tablicę, w której przekazujemy wszystkie potrzebne parametry
End Function
Sub Test1()
MsgBox myLog10(100)
MsgBox LOG10(100)
End Sub
Podobnie mamy:
Function myWielkanoc(Yr as Long) as Date
'oblicza datę Wielkanocy dla danego roku
Dim oFuncAcc as Object
oFuncAcc = CreateUnoService("com.sun.star.sheet.FunctionAccess")
myWielkanoc = oFuncAcc.callFunction( "EASTERSUNDAY", Array(Yr) )
'UWAGA: funkcja Array() tworzy tablicę, w której przekazujemy wszystkie potrzebne parametry
End Function
Sub Test2()
MsgBox myWielkanoc(2000)
MsgBox EASTERSUNDAY(2000)
End Sub
Oczywiście jeśli nie przewidujemy wielokrotnego używania takiej funkcji, to możemy powyższą konstrukcję umieścić wprost w procedurze, w której akurat z danej funkcji potrzebujemy skorzystać:
Sub Suma()
'procedura sumuje wszystkie liczby z komórek w zakresie od A1 do Z16
Dim oSht as Object, oRng as Object, oCell as Object
Dim oFuncAcc as Object
oSht = ThisComponent.getSheets.getByIndex(0) 'uchwyt do pierwszego arkusza
oRng = oSht.getCellRangeByPosition(0, 0, 25, 15) 'od komórki A1 do Z16
oCell = oSht.getCellByPosition(0, 16) 'komórka A17
oFuncAcc = CreateUnoService("com.sun.star.sheet.FunctionAccess")
oCell.Value = oFuncAcc.callFunction( "SUM", Array(oRng.Data) )
End Sub
LibreOffice Calc – makra – przykłady Strona główna