用于跨工作簿访问的后期绑定UDF

我在excel中创build了一个UDF,我想从所有的excel项目中访问它。 为了做到这一点,我把它放在PERSONAL.XLSB的模块中,用=PERSONAL.XLSB!MYFUNC(Arg1, Arg2...)

但是我得到的错误User-defined type not defined 。 这是,如果我理解正确(我可能不会!),因为我的项目使用早期绑定,并需要Microsoft Internet控件的库引用。 根据这个网站的解决scheme是使用迟绑定,首先声明所有的variables为Object ,然后以某种我不完全确定的方式设置它们

一些代码

这里是我的代码,除了引用互联网控件的Dim s和Set s之外,没有任何东西:

 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?) 

然后对于所有的HTMLDocumentHTMLDivElement或其他任何是objIE的子集*:链接的页面让我觉得我应该声明variablestypes为一个常量(见下文)

*(通过“子集”我的意思是对于objIE 设置 。就像HTMLDocument setobjIE.documentHTMLDivElement设置为objIE.document.getElementById("fbar") 。请参阅所有相对于应用程序objIE -我不知道这些variables的总称是什么)。

 Const HTMLDocument As Long = 0 

然后使用声明的types从我的objIE对象创build项目:

 Dim currPage As Object Set currPage = objIE.CreateItem("HTMLDocument") 

它是否正确? Const声明的含义是什么?我是否总是声明一个这样的数字,或者是否随数据types而改变? 我如何知道要设置什么?

也许有更好的方法让我的UDF公开访问,也许这与绑定无关。 这些都是我很新的概念,我还没有find指示,我可以遵循!

这里是你的代码适应后期绑定

 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