Application.Find
является расширенным членом интерфейса Excel.Application
. Он в значительной степени привязан во время выполнения, поэтому нигде не отображается.Тип COM для Excel.Application
является расширяемым и расширен за счет того, что представляется членами интерфейса WorksheetFunction
, но с помощью механизма вычислений Excel (или, по крайней мере, в соответствии с тем, как Excel будет оценивать его)а не через среду выполнения VBA.
Другими словами это:
Debug.Print Application.Find("4", "12345", 1)
В значительной степени это:
Debug.Print Application.WorksheetFunction.Find("4", "12345", 1)
Разница становится более очевидной, когда вы даете имнедопустимые параметры:
Debug.Print TypeName(Application.Find("4", "12345", 10))
Debug.Print TypeName(Application.WorksheetFunction.Find("4", "12345", 10))
Первый выводит Error
, второй генерирует ошибку времени выполнения 1004, что позволяет более идиоматически обрабатывать ошибки (т. е. срабатывает оператор On Error
).Тип Error
нельзя преобразовать в любой другой тип VBA, поэтому ожидайте ошибку времени выполнения 13 «несоответствие типов», если вы попытаетесь присвоить его String
или чему-либо другому, чем Variant
.Функция IsError
возвращает True
с учетом Variant/Error
переменной / выражения.
Если вам нужно определить положение подстроки внутри String
, используйте функцию VBA.Strings.InStr
:
Debug.Print InStr(1, "12345", "4", vbTextCompare)
Обратите внимание на порядок параметров и дополнительный параметр VbCompareMethod
, который выполняет поиск без учета регистра с vbTextCompare
, поиск с учетом регистра с vbBinaryCompare
, и если вы находитесь в Access,vbDatabaseCompare
соответствует методу сравнения текущей базы данных.Если опущено, Option Compare
, указанное на уровне модуля, определяет значение параметра;Option Compare Binary
по умолчанию.
При вызове функций стандартной библиотеки VBA с ранним связыванием должно быть меньше времени выполнения, чем при запросе IDispatch
в Object
для определения функции Find
... и затемполучите Excel для оценки результата.
Другие примеры расширенных интерфейсов включают ADODB.Connection
, с которыми вы можете (если вы должны - другой вопрос!) вызватьхранимой процедуры, как если бы вы были участником вызова - обратите внимание, что и здесь intellisense не может помочь, и Option Explicit
закроет глаза, поскольку эти вызовы всегда связаны с запозданием (то есть разрешаются при выполнениивремя).