这似乎是一个简单的问题,但我追逐几个小时的论坛后,我认为这可能是不可能的。将早期绑定转换为后期绑定而不更改对象类型
我经常想将程序从早期绑定转换为后期绑定。通常,它是一个vba,应用程序的可视化基础,在Excel 2010和Windows 7专业版下运行的程序。
为了便于讨论,我们假设它是以下内容。
Sub EarlyBind()
' use IDE > Tools > references > and select “Microsoft Internet Controls”
Dim shellWins1 as shdocvw.shellwindows
Line1: Set shellWins1 = New SHDocVw.ShellWindows
MsgBox TypeName(shellWins1) ' this will display “IShellWindows”
' other code that expects to be working with an IshellWindows object …..
End Sub
根据我的经验,将这样的程序转换为后期绑定有时很难。
例如,我发现了一些论坛上建议我将其更改为
Set shellwins1 = createobject("Shell.applicaton")
但是,创建一个IShellDispatch5对象,而不是一个IshellWindows对象。这意味着我必须更改其他代码以适应新的对象类型。而且,当然,我必须测试其他代码的细微差别。
所以,我的目标是找到一个通用的解决方案,它允许我重写“Line1”来创建具有后期绑定的CORRECT对象类型。我也想避免需要设置为“Microsof Internet控件的引用。换句话说,我想要的代码看起来像这样: 子LateBind()
Dim shellWins1 as object
Line1: Set shellWins1 = createobject(“xxxxxx.yyyyyy”).zzzzzz
MsgBox TypeName(shellWins1) ‘ this should display “IShellWindows”
….. other code that expects to be working with an IshellWindows object …..
End Sub
我知道如何使用VBA IDE来找到对象关联的dll在这种情况下,DLL是图书馆SHDOCVW C:\ WINDOWS \ Syswow64资料\ ieframe.dll
我已经安装了OLEVIEW,可以找到相关的IshellWindows“幻数”为CLSID,类型库。 ,和Inteface(例如接口是85CB6900-4D95-11CF-960C-0080C7F4EE85)。
但是,我不知道如何将它们转换为上面示例代码中可以在line1中使用的程序ID。
我希望这里有人能帮忙。 ------随着MeHow的帮助,我现在有了答案! ------
要切换“设置MyObj中=新xxxx.yyyyy”来晚了任意对象类型
Change set myObj = new xxxx.yyyyy
into set myObj = CreateObject("xxxx.yyyyy")
很多时候,将工作结合。
但是,在某些情况下(例如“shDocVw.ShellWindows。”)它会给出错误429 ActiveX组件无法创建。
当发生这种情况时,我完全失去了运气。使用该EXACT对象类的后期绑定是不可能的。相反,我必须找到一个类似的替代课程。 (例如“Shell.Application”)。
也许试试[**这**](http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_22489757.html)(* ive从未使用它,所以我可以' t推荐*) – 2013-12-17 10:33:16
是的,这是关于使用Shell.Application作为shDocVw.ShellWindows的替代方法的技术链接。而且,我过去成功地使用了这些技术。今天的问题集中在避免这种选择的方法上,但是后期的约束是不可能的。 – user3107264
这是正确的。我们尝试了... – 2013-12-17 12:05:00