基于Microsoft VBA文档,我知道有Range.Find(What, After, LookIn, Lookat, SearchOrder....),但没有Application.Find()方法.如果我在VBE中使用对象浏览器来检查Application对象,我仍然看不到任何附加到Application对象的Find方法.当我键入"Application.Find(")时,没有intellisense是有道理的
但是,Application.Find()方法才有效.
txt = "EEZ || EZE 123"
pos = Application.Find(" ", txt, 1)
Run Code Online (Sandbox Code Playgroud)
pos会有价值4.为什么?...没有docs,没有方法在对象浏览器中,该方法仍然可以工作?
Application.Find是Excel.Application界面的扩展成员..它在运行时非常强大,这就是为什么它没有显示在任何地方.COM类型Excel.Application是 可扩展的,并且通过看起来是WorksheetFunction接口的成员进行扩展,但是通过Excel计算引擎(或者至少与Excel将如何评估它的方式一致)而不是通过VBA运行时扩展.
换句话说:
Debug.Print Application.Find("4", "12345", 1)
Run Code Online (Sandbox Code Playgroud)
几乎是这样的:
Debug.Print Application.WorksheetFunction.Find("4", "12345", 1)
Run Code Online (Sandbox Code Playgroud)
当你给它们无效的参数时,差异更明显:
Debug.Print TypeName(Application.Find("4", "12345", 10))
Debug.Print TypeName(Application.WorksheetFunction.Find("4", "12345", 10))
Run Code Online (Sandbox Code Playgroud)
第一次打印Error,第二次抛出运行时错误1004,允许更多惯用的错误处理(即一个On Error语句将启动).该Error类型无法转换为任何其他VBA类型,因此如果您尝试将其分配给a String或a以外的任何其他类型,则期望运行时错误13"类型不匹配" Variant.该IsError函数返回True给定的一个Variant/Error可变/表达.
如果需要在a中找到子字符串的位置String,请使用以下VBA.Strings.InStr函数:
Debug.Print InStr(1, "12345", "4", vbTextCompare)
Run Code Online (Sandbox Code Playgroud)
请注意参数的顺序,以及额外VbCompareMethod的同时与不区分大小写的搜索参数vbTextCompare,区分大小写的搜索,使用vbBinaryCompare,如果你在访问的时候,vbDatabaseCompare匹配当前数据库的比较方法.如果省略,Option Compare则在模块级指定确定参数值; Option Compare Binary是默认的.
调用早期绑定VBA标准库函数应该承担更少的运行时开销比查询IDispatch上Object找到一个Find功能......然后让Excel的评估结果.
扩展接口的其他示例包括ADODB.Connection,您可以(您是否应该是另一个问题!)调用存储过程,就像成员调用一样 - 请注意,intellisense再次无法帮助,并且Option Explicit会对此视而不见这些调用总是后期绑定(即在运行时解析).
| 归档时间: |
|
| 查看次数: |
1331 次 |
| 最近记录: |