Разобрался, оказывается, внутренние функции надо объявлять после методов. Кроме того, я забыл Set в методе CreateFerula где происходит вызов find_cell(). Теперь все работает. Рабочий вариант приложен к сообщению, если кому интересно.
Удалось смоделировать ошибку. Оказывается, она возникает, когда в модуль класса добавляем функцию find_cell. Пример в приложенном к сообщению файле. Ранее я думал, что проблема с одинаковым именем параметра sheet, что удивляет. На всякий случай переименовал параметр sheet в методе CreateFerula на wsheet, как я и предполагал не помогло. Любопытно, что если мы определение поля:
Код
Private WS As Worksheet
Поместим перед определением функции find_cell, то ошибка возникает уже в Module1, при этом ошибка другая: "Object variable or With block variable not set". Эта ошибка возникает при вызове метода:
Казанский написал: ClearKbdBuf, да, на первый взгляд выглядит странно. Я хочу найти решение, а для этого увидеть ошибку своими глазами. Что я должен сделать для этого? Создать модуль класса, поместить туда строки из нескольких разрозненных фрагментов, создать модуль, поместить туда строки... И тут приходит мысль - А МНЕ ЭТО НАДО?! Делать работу за вопрошающего?! Нельзя было приложить книгу?
Справедливое замечание, но к сожалению, книгу не могу выложить целиком из-за конфиденциальности. Поэтому выкладывал по кускам. Любопытно, но начал готовить другую книгу (приложена к сообщению), чтобы вызвать идентичную ошибку. Все работает без ошибок. Видимо, где-то в синтаксисе косяк в исходном модуле, буду разбираться.
Я прекрасно понимаю, что означает Variable not defined. Мне не понятно, почему это возникает при попытке установить свойство WS описываемого в модуле класса. Это при том, что процедура объявлена внутри модуля класса и в ее область видимости поле WS должно попадать.
Подскажите, пожалуйста, можно ли каким нибудь образом использовать именованные функции в макрофункции ВЫЧИСЛИТЬ ( англ. Evaluate). Создаю именованную функцию Eval, которую определяю как =ВЫЧИСЛИТЬ(B1). Предполагается, что в B1 имя именованной функции, например, Test, которая определена как =C1+D1. Результат: применение =Eval вызывает ошибку #ЗНАЧ!, при этом если в B1 простое выражение, например, 12/3 то результат 4. Либо я чего-то не пониманию в использовании именованных формул или именованные формулы в Evaluate нельзя применять, есть ли у Вас какая либо информация по этому поводу?
Все описанное реализовано в примере.
Дополнительно: пробовал вызывать в макросе - результат тот же.