gpt4 book ai didi

Excel VBA Application.Find() 方法

转载 作者:行者123 更新时间:2023-12-02 15:53:05 26 4
gpt4 key购买 nike

根据 Microsoft VBA 文档,我知道有 Range.Find(What, After, LookIn, Lookat, SearchOrder....) ,但没有Application.Find()方法。如果我转到 VBE 中的对象浏览器来检查Application对象,我仍然看不到任何Find附加到Application对象的方法。当我输入“Application.Find(”

时,没有智能感知是有道理的

但是,Application.Find() 方法却可以正常工作。

txt = "EEZ || EZE 123"
pos = Application.Find(" ", txt, 1)

pos 将具有值(value) 4. 为什么? ...没有文档,对象浏览器中没有方法,该方法仍然可以工作吗?

最佳答案

Application.FindExcel.Application 接口(interface)的扩展成员。它几乎是在运行时附加的,这就是为什么它没有在任何地方显示。 Excel.Application 的 COM 类型可扩展,并且可以通过看似 WorksheetFunction 接口(interface)的成员进行扩展,但通过 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 类型,因此如果您尝试将其分配给 String,则会出现运行时错误 13“类型不匹配”,或者除了 Variant 之外的任何内容。给定 Variant/Error 变量/表达式,IsError 函数返回 True

如果您需要定位String内子字符串的位置,请使用VBA.Strings.InStr函数:

Debug.Print InStr(1, "12345", "4", vbTextCompare)

请注意参数的顺序,以及附加的 VbCompareMethod 参数,该参数使用 vbTextCompare 进行不区分大小写的搜索,使用 vbBinaryCompare< 进行区分大小写的搜索,如果您使用的是 Access,则 vbDatabaseCompare 匹配当前数据库的比较方法。如果省略,则在模块级别指定的Option Compare确定参数值; 选项比较二进制是默认值。

与在 Object 上查询 IDispatch 来定位 Find 函数相比,调用早期绑定(bind)的 VBA 标准库函数会产生更少的运行时开销...然后让 Excel 评估结果。

扩展接口(interface)的其他示例包括 ADODB.Connection,您可以(您是否应该是另一个问题!)调用存储的过程就像成员调用一样 - 请再次注意,intellisense 无法提供帮助,并且 Option Explicit 会视而不见,因为这些调用始终是后期绑定(bind)的(即在运行时解决)。

关于Excel VBA Application.Find() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53625186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com