Доброго времени суток. Написал функцию в Libreoffice Calc на VBA. Она отрабатывает правильно и без ошибок, но в момент открытия документа появляется следующая ошибка ровно столько раз, сколько эта функция используется в формулах:
BASIC runtime error.
'1'
Type: com.sun.star.uno.RuntimeException
Message: unsatisfied query for interface of type com.sun.star.sheet.XSpreadsheetView!
Причем если закрыть окна с этой ошибкой, то все будет работать как будто ее и не было, но дело в том, что функция используется много раз и закрывать каждый раз тоже приходится много окон.
Знатоки макросов в Libreoffice, подскажите, в чем проблема?
Сам макрос (сумма чисел в строке с заданным отступом и промежутком):
REM ***** BASIC *****
Sub Main
End Sub
Option VBASupport 1
Option Explicit
Function SumEvery(startCell As Range, row As Boolean, gape As Integer) As Double
On Error GoTo ErrorHandler
Dim sht As Worksheet
Set sht = ActiveSheet
Dim lastCell As Range
If row Then
Set lastCell = Cells(startCell.Row, sht.Columns.Count)
Else
Set lastCell = Cells(sht.Rows.Count, startCell.Column)
End If
Dim resRan As Range
Set resRan = Range(startCell, lastCell)
Dim res As Double
res = 0.0
Dim c As Integer
For c = 1 to resRan.Cells.Count
If (c - 1) Mod gape = 0 Then
res = res + resRan.Cells(c).Value
End If
Next
SumEvery = res
Exit Function
ErrorHandler:
Stop
End Function
Выяснил, что проблемный участок кода здесь:
Dim sht As Worksheet
Set sht = ActiveSheet
Что с ним можно сделать? Если заменить на
Dim sht As Object
Set sht = ThisComponent.getCurrentController().getActiveSheet()
то ситуация та же самая, но ошибка изменяется на:
BASIC runtime error.
'91'
Object variable not set.
Ошибка исправлена созданием новой библиотеки в Macros Organizer. Но теперь использование макроса возвращает ошибку #NAME? пока он не будет открыт на редактирование
Причина ошибки #NAME? здесь https://stackoverflow.com/questions/26442049/name-error-after-opening-spreadsheet-with-macro
В итоге вернул функцию обратно в docname.ods - Standard - Module1 и добавил игнорирование ошибок. В описании исправленная функция