1

Я пытаюсь вставить функцию Index-Match в мой макрос VBA. Это выглядит так:

Столбцы ("C:C").Forumla = "= INDEX ('[blabla.xlsm] Sheet1'!$ F $ 4:$ F $ 102, MATCH (B1, '[blabla.xlsm] Лист1'!$ G $ 4:$ G $ 102,0))»

Однако я продолжаю получать «Ошибка времени выполнения 438: объект не поддерживает это свойство или метод»

Любые советы, предложения будут с благодарностью.

1 ответ1

2

Объявите переменную Range и присвойте ее Columns("C:C") например, Set myRange = ActiveSheet.Columns("C:C") (если это в стандартном модуле) или Set myRange = Me.Columns("C:C") (если это в модуле рабочего листа).

Dim myRange As Range
Set myRange = Columns("C:C")
myRange.Formula = "..."

Затем, когда вы вводите точку в myRange. вы получите раскрывающийся список с доступными членами, всплывающими подсказками для параметров и информацией во время компиляции. Причина, по которой вашему коду было разрешено компилироваться и запускаться (независимо от того, указано или нет Option Explicit ), заключается в том, что Columns возвращает объект Range , но не имеет никаких параметров - аргументы ("C:C") фактически предоставляются в Range.[_Default] свойство, которое возвращает Variant . Поэтому любые вызовы членов, связанные с ним, разрешаются только во время выполнения, т.е. любая опечатка не помешает компиляции и вызовет ошибку 438 во время выполнения.

Объявляя переменную Range , вы «приводите тип» этого Variant в Range , и оттуда компилятор может проверять, какие элементы существуют, и генерировать ошибки времени компиляции, если опечатка приведена.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .