Почему не работает UDF?

Автор Михаил С., 29 апреля 2016, 22:48

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

Михаил С.

Всем здравствуйте!
Вообще-то я работаю в 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.
И вот здесь загвоздка.
Функцию сделал, вроде работает, но при открытии файла вместо результата выводит #ИМЯ?, и пока не залезешь в макрос и в формулу на листе - работать не хочет.
Что я сделал не так (или чего не сделал)?

rami

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

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

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

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

Михаил С.