аналог объекта Range vba для openoffice

Автор Andrey, 3 февраля 2012, 10:33

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

Andrey

Добрый день.
Подскажите, как сделать в ooo basic так, чтобы аргументом функции был диапазон ячеек. Аналог vba для примерно следующего
Function Wave (oRange as Range) as Integer
Спасибо

JohnSUN

#1
Добро пожаловать на форум, Andrey!
До недавнего времени такой возможности в бэйсике не было.
Функция всегда интерпретировала принимаемый параметр-диапазон как двумерный массив Variant - только значения, без адресов, без явных ссылок на ячейки.
Чтобы работать со ссылками на адрес ячейки или диапазона, приходилось передавать адрес отдельным параметром в виде текстовой строки или явным указанием левая-верхняя-правая-нижняя в виде чисел и уже в теле функции получать объекты листа через .getCellByPosition(), .getCellRangeByPosition() или .getCellRangeByName().
Сейчас положение немного улучшилось. По мере того, как продвигаются работы по совместимости форматов .xls и .ods, офисы всё лучше и лучше понимают синтаксис VBA.
Оснастив код дополнительными указаниями
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1

можно добиться (в некоторых версиях некоторых офисов) более-менее устойчивой работы в привычном стиле VBA.
Например, приложенный файл в ячейке C3 содержит формулу
=TEXT_RNG(F23:F27)
Сама TEXT_RNG() - это простенькая пользовательская функция
Public Function Text_Rng(oRange As Range) As String
   Text_Rng = oRange.CellRange.AbsoluteName
End Function

В OpenOffice.pro 3.3.0 (И-Р) этот макрос работать не будет. А вот, скажем, в LibreOffice 3.4.3 сразу после загрузки документа он выдает значение #NULL! (попытался рассчитать значение до того, как все объекты загрузились), но после Ctrl+Shift+F9 (запустить пересчет) показывает $Лист1.$F$23:$F$27.

Но чтобы добиться хотя бы такого результата, пришлось пойти на хитрость: создать Excel'евский файл с макросом, открыть его в LiO (при этом создалась структура папок в библиотеке Standard, которая соответствует идеологии VBA) и уже потом писать функцию на Basic и удалять изначальные макросы.

В общем, если всё это кажется скучным, то я рекомендовал бы - пока! - пользоваться старыми проверенными приёмами, а чуть позже, с выходом новых версий офисов, просто проверять насколько успешно они справляются с макросами VBA. Надеюсь, когда-то наступит момент, когда xls-книга откроется в ООо и все макросы отработают без ошибок.

[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Andrey

Спасибо за ответ. Написал пока с текстовым аргументом.