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

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

17 Сентябрь 2019, 19:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Почему не работает UDF?  (Прочитано 2013 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Михаил С.
Новичок
*
Offline Offline

Сообщений: 2


« Стартовое сообщение: 29 Апрель 2016, 22:48 »

Всем здравствуйте!
Вообще-то я работаю в Excel. Изначально задача стояла такая:
Цитата:
На складе стоят стеллажи. Каждый имеет свою букву: A, B. C и т.д. Каждый имеет 4 полки. На каждой полке стоят предметы с разным инвентарным номером. Существует опись этих предметов в Excel на Листе 1. Задача состоит в том, чтобы на Листе 2 этого файла при упоминании инвентарного номера выполнялся поиск его местоположения на Листе 1 и в соседнюю ячейку выводился адрес в формате: буква и номер столбца.
Скажите, возможно ли еще сделать так, чтобы в адресе было дополнение в виде указания позиции артикула на полке, считая от начала и общее количество артикулов. Например, полка заставлена артикулами: 122/96/177/164/17. Нужный мне артикул 177. Адрес ячейки - B2. Порядковый номер на полке, считая от начала, для этого артикула -3 (слешы являются разделителями). Всего на полке - 5 артикулов.
Таким образом, возможно получить адрес вида "B2(3*5)" - где в скобках:
3 - порядковый номер артикула,
5 - общее количество артикулов на полке.
* - разделитель
В Excel я эту задачу решил простенькой UDF :
Код:
Function MiniSklad$(Артикул$, Диапазон_Поиска As Range)
Dim Cel As Range, a, i&
For Each Cel In Диапазон_Поиска
    a = Split(Cel, "/")
    For i = 0 To UBound(a)
        If Артикул = Trim(a(i)) Then
            MiniSklad = MiniSklad & Cel.Address(RowAbsolute:=False, ColumnAbsolute:=False) & "(" & i + 1 & "*" & UBound(a) + 1 & ")" & "/"
            Exit For
        End If
    Next
Next
If MiniSklad = "" Then
    MiniSklad = "Нет артикула"
Else
    MiniSklad = Left(MiniSklad, Len(MiniSklad) - 1)
End If
End Function
Но теперь потребовалось перенести все это дело в LibreOffice Calc.
И вот здесь загвоздка.
Функцию сделал, вроде работает, но при открытии файла вместо результата выводит #ИМЯ?, и пока не залезешь в макрос и в формулу на листе - работать не хочет.
Что я сделал не так (или чего не сделал)?

* Копия Rogulov-МиниСклад1.ods (20.18 Кб - загружено 11 раз.)
Записан
rami
Гуру
*******
Online Online

Пол: Мужской
Сообщений: 2 759


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 30 Апрель 2016, 10:15 »

Нужно сделать три вещи:

1. переместить макрос в библиотеку Standard — эта библиотека загружается автоматически, а другие нет.

2. убрать строку кода Option VBASupport 1 — она в данном макросе не нужна, а если нужна для других, то пересмотреть все макросы.

3. после удаления Option VBASupport 1 в строке a=Diapason.value убрать .value

* Rogulov-МиниСклад2.ods (20.59 Кб - загружено 9 раз.)
Записан

Михаил С.
Новичок
*
Offline Offline

Сообщений: 2


« Ответ #2: 30 Апрель 2016, 10:44 »

rami, спасибо!
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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