Работа VBA кода в LibreOffice

Автор bigor, 5 апреля 2023, 15:11

0 Пользователи и 1 гость просматривают эту тему.

bigor

Всем привет.
Столкнулся со странным поведением LibreOffice при запуске VBA кода.
Началось с темы на planetaexcel. В общем представлен код на vba
Option VBASupport 1
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
 
    If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
        If IsNumeric(Target.Value) Then
            Application.EnableEvents = False
            Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Target.Value
            Application.EnableEvents = True
        End If
    End If
End Sub

если этот код прямо вставить в модуль библиотеки стандарт LibreOffice, он вываливается в ошибку
Если же файл создать в excel и код будет находится в "библиотеке" VBA Project, то код отрабатывет без ошибок
Версия LO Version: 7.4.2.3 (x86)

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

mikekaganski

Цитата: bigor от  5 апреля 2023, 15:11если этот код прямо вставить в модуль библиотеки стандарт LibreOffice

Вы имеете ввиду библиотеку где? В документе или общую? И ошибка какая?
С уважением,
Михаил Каганский

bigor

В документе. Файлики приложил. Ошибка
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

mikekaganski

Ага, нужно было посмотреть, на каком событии оно висит. В ODS оно даёт такую ошибку при изменении ячеек.

А вот XLSM у меня открывается с макросом, но без привязки к событиям листов. И если я назначаю на событие изменения ячейки, то вываливается та же ошибка.

Version: 7.5.2.2 (X86_64) / LibreOffice Community
Build ID: 53bb9681a964705cf672590721dbc85eb4d0c3a2
CPU threads: 12; OS: Windows 10.0 Build 19045; UI render: default; VCL: win
Locale: ru-RU (ru_RU); UI: en-US
Calc: CL threaded
С уважением,
Михаил Каганский

bigor

#4
В ODS он висит на изменении ячейки.
В XLSM на событие не вешал, но работает правильно при изменении ячеек А1:А10

Выложенный ранее xlsm файл попорчен после сохранения в Libre, выкладываю рабочий
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

sokol92

#5
Тут "обман зрения"(я о файле TestNak.ods). Поскольку мы назначаем макрос Worksheet_Change на событие листа OnChange, то макросу передается в качестве параметра объект SheetCell / SheetCellRange / SheetCellRanges, а не то, что указано в шапке функции (Excel.Range).
Владимир.