Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

14 Декабрь 2017, 01:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: аналог объекта Range vba для openoffice  (Прочитано 7594 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Andrey
Новичок
*
Offline Offline

Сообщений: 3


« Стартовое сообщение: 3 Февраль 2012, 09:33 »

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

Пол: Мужской
Расположение: Киев
Сообщений: 2 373


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 3 Февраль 2012, 11:28 »

Добро пожаловать на форум, 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-книга откроется в ООо и все макросы отработают без ошибок.

[вложение удалено Администратором]
« Последнее редактирование: 3 Февраль 2012, 11:48 от JohnSUN » Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Andrey
Новичок
*
Offline Offline

Сообщений: 3


« Ответ #2: 15 Февраль 2012, 17:27 »

Спасибо за ответ. Написал пока с текстовым аргументом.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!