這似乎是一個簡單的問題,但我追逐幾個小時的論壇後,我認爲這可能是不可能的。將早期綁定轉換爲後期綁定而不更改對象類型
我經常想將程序從早期綁定轉換爲後期綁定。通常,它是一個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