LINUX.ORG.RU

Макрос на VBA для Libreoffice, странная ошибка

 , , , ,


0

1

Доброго времени суток. Написал функцию в 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 и добавил игнорирование ошибок. В описании исправленная функция


Ответ на: комментарий от anonymous

Пишут, но захотелось на VBA, проблема не в нем. Я так понял, что макрос выполняется слишком рано во время открытия. Ссылка помогла побороть ошибку, но теперь вместо результата в ячейке появляются такие ошибки: #NAME?, после открытия макроса меняется на #VALUE!

Rot1 ()
Последнее исправление: Rot1 (всего исправлений: 1)
Ответ на: комментарий от Rot1

Не понял. row нужен, чтобы

Вот и я не понял. Это не функция, а помесь функции и макроса. Говоря проще - винегрет. Разрабы на подобную бурду не рассчитывают. Функции работают только с теми диапазонами, которые ты им непосредственно указываешь. С произвольными диапазонами работают макросы. Так что твой косяк.

anonymous ()