我在excel中创建了一个UDF,我想从所有excel项目中访问它。为此,我将其放在PERSONAL.XLSB
的模块中,并使用=PERSONAL.XLSB!MYFUNC(Arg1, Arg2...)
但是我收到错误User-defined type not defined
。这是,如果我理解正确(我可能不会!),因为我的项目使用早期绑定并需要库引用 Microsoft Internet Controls 。根据{{3}}的解决方案是使用后期绑定,首先将所有变量声明为Object
s,然后以某种方式设置它们,我不完全确定
这是我的代码,除了引用互联网控件的Dim
和Set
之外的所有内容:
Public Function GOOGLE_COUNT_latebound(searchTerm As String, xRes As Long, yRes As Long, Optional timeout As Long = 10, Optional arrayIndex As Long = 1) As Variant
Dim objIE As InternetExplorer
Dim currPage As HTMLDocument
Dim valueResult As IHTMLElementCollection
Set objIE = New InternetExplorer
Set currPage = objIE.document
Dim myDiv As HTMLDivElement: Set myDiv = currPage.getElementById("fbar")
Dim elemRect As IHTMLRect: Set elemRect = myDiv.getBoundingClientRect
Set valueResult = currPage.getElementById("rg_s").getElementsByTagName("IMG")
objIE.Quit
End Function
现在要迟到绑定objIE
我只需写
Dim objIE as object
Set objIE = CreateObject("InternetExplorer.Application")'(but why .Application I'm still not sure about?)
然后对于所有HTMLDocument
和HTMLDivElement
或其他任何objIE的子集*:链接页面让我觉得我应该将变量类型声明为常量(见下文)
*(通过“子集”我的意思是将相对设置为objIE。与HTMLDocument
一样set
为objIE.document
或HTMLDivElement
被设置为objIE.document.getElementById("fbar")
。请参阅所有与应用程序相关的objIE
- 我不知道这些变量的一般术语是什么。)
Const HTMLDocument As Long = 0
然后使用声明的类型从我的objIE对象创建项目:
Dim currPage As Object
Set currPage = objIE.CreateItem("HTMLDocument")
这是对的吗? Const
声明的含义是什么,我是否只是声明一个这样的数字,或者它是否随数据类型而变化?我怎么知道要把它设置为什么?
也许有一种更好的方式让我的UDF可以公开访问,也许这与绑定无关。这些都是我非常新的概念,我还没有找到可以遵循的说明!
答案 0 :(得分:0)
这是适合使用后期绑定的代码
Public Function GOOGLE_COUNT_latebound(searchTerm As String, xRes As Long, yRes As Long, Optional timeout As Long = 10, Optional arrayIndex As Long = 1) As Variant
Dim objIE As Object
Dim currPage As Object
Dim valueResult As Object
Set objIE = CreateObject("internetexplorer.application")
Set currPage = objIE.document
Dim myDiv As Object: Set myDiv = currPage.getElementById("fbar")
Dim elemRect As Object: Set elemRect = myDiv.getBoundingClientRect
Set valueResult = currPage.getElementById("rg_s").getElementsByTagName("IMG")
objIE.Quit
End Function