在AutoCAD的VBA中使用了如下代碼:
Dim Excel As Object
Set Excel = CreateObject("Excel.Application")
參考版本是office 2013版,Excel 15.0
當更換電腦并且更換為Excel 2007版本后,工具->參考中提示“丟失:Microsoft Excel 15.0.....”,程式報錯。需要去掉“丟失:Microsoft Excel 15.0.....”前面的勾,然后勾上“Microsoft Excel 12.0....”,程式方可正常運行。
有沒有辦法避免這個問題,即創建Excel物件的時候,不提示參考庫丟失,跨版本的參考Excel。
請教下各位高手。
uj5u.com熱心網友回復:
這個簡單,設計時“參考”,代碼撰寫好后,去掉參考就行了。凡是用到 WorkBook、WorkSheet之類的“型別”變數,全部改成 Object 型別。
uj5u.com熱心網友回復:
依然報錯,顯示CAD2014中“自動化(Automation)錯誤”uj5u.com熱心網友回復:
沒有參考,Set Excel = CreateObject("Excel.Application")這句報錯?不可能吧!
VB6、VBS之類的,都可以正常執行。
uj5u.com熱心網友回復:
我現在也遇到了這個問題,公司WIN7平臺excel2010沒問題,但是在筆記本WIN10上的excel2016打開就會報錯,找不到工程或庫,看了百度,把參考中的丟失取消勾選,然后就報變數未定義
Private Sub Workbook_Open()
Call Prime_A_PRJ.Menu_Caption
Call Prime_A_PRJ.Sheet_Lock
ActiveWorkbook.Worksheets("Menu").Select
End Sub
uj5u.com熱心網友回復:
在64位Windows下:64位exe和dll在目錄c:\windows\system32目錄下;
32位exe和dll在目錄c:\windows\syswow64目錄下;
所以要注意:
在win64位系統下注冊32位ocx或dll需要將32位ocx或dll拷貝到c:\windows\syswow64\目錄下。
且注冊要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
64 位 Windows 平臺注意點之檔案系統重定向 http://www.cnblogs.com/jiake/p/4981555.html
64 位 Windows 平臺注意點之注冊表重定向 http://www.cnblogs.com/jiake/p/4956218.html
uj5u.com熱心網友回復:
Excel2016分32位/64位吧。我猜。
uj5u.com熱心網友回復:
看到你的“ActiveWorkbook”沒!
這個只能在 Excel的VBE中使用,其它環境下都沒有這個“內定物件”的!!!
你在VB6中用這種代碼,不提示“變數未定義”才是怪事。
即使參考了 Excel的物件庫,也不能直接使用“ActiveWorkbook”這個物件吧,
更何況我說的方式,是要求在“工程”中不參考物件庫的。
uj5u.com熱心網友回復:
Excel2016分32位/64位吧。我猜。
還猜個鳥……

從 Office 2007開始,就分64位和32位了,就更別說2016了。
我最近寫的一個軟體,就是用 CreateObject("Excel.Application") 的方式創建Excel物件。
在我的電腦上:
WinXP + Office 2003
Win 7 /SP1 64位 + Office 2007 32位
Win 10 專業版64位 + Office 2010 64位,
運行完全正常。
uj5u.com熱心網友回復:
原來我把VBA當VB6了!
uj5u.com熱心網友回復:
原來我把VBA當VB6了!
不管是VBA(非Excel環境下的VBE),還是VB6,如果要使用“Ecxel物件”的話,方法幾乎是一樣的。
uj5u.com熱心網友回復:
VB6(32位)里面能呼叫64位的Excel物件?求科普。
uj5u.com熱心網友回復:
VB6(32位)里面能呼叫64位的Excel物件?
求科普。
Excel的“后臺COM行程”是ActiveX EXE行程!
程式中“創建Excel物件”成功后,它是一個獨立的行程。
難道它就不能分別實作32位和64位的COM Object介面嗎 !!!
只要這個COM物件實作了與ActiveX EXE的通訊、具體操作由EXE去執行完成了就行。
這樣,32位程式,也很方便的“操作”了64位程式……
你也是個老鳥了,這么簡單的道理,還要我提醒你?
uj5u.com熱心網友回復:
VB6(32位)里面能呼叫64位的Excel物件?
求科普。
Excel的“后臺COM行程”是ActiveX EXE行程!
程式中“創建Excel物件”成功后,它是一個獨立的行程。
難道它就不能分別實作32位和64位的COM Object介面嗎 !!!
只要這個COM物件實作了與ActiveX EXE的通訊、具體操作由EXE去執行完成了就行。
這樣,32位程式,也很方便的“操作”了64位程式……
你也是個老鳥了,這么簡單的道理,還要我提醒你?
功夫再高的人不都有練門嘛。
uj5u.com熱心網友回復:
我以前以為64位Excel不可能直接提供32位COM介面,必須換32位Exceluj5u.com熱心網友回復:
我以前以為64位Excel不可能直接提供32位COM介面,必須換32位Excel
這一點,我倒覺得MS做得不錯。
32位程式肯定不能直接運用64位的組件,但若通過合適的“通訊機制”來進行“指揮操作”,
還是可以實作“看起來32位程式也用上了64位軟體功能”一樣。
uj5u.com熱心網友回復:
64位Excel不可能直接提供32位COM介面,必須換32位Excel 這句話是對的uj5u.com熱心網友回復:
64位Excel不可能直接提供32位COM介面,必須換32位Excel 這句話是對的
呵呵,明顯不懂,還瞎胡鬧…………
uj5u.com熱心網友回復:
這個簡單,設計時“參考”,代碼撰寫好后,去掉參考就行了。
凡是用到 WorkBook、WorkSheet之類的“型別”變數,全部改成 Object 型別。
我現在也遇到了這個問題,公司WIN7平臺excel2010沒問題,但是在筆記本WIN10上的excel2016打開就會報錯,找不到工程或庫,看了百度,把參考中的丟失取消勾選,然后就報變數未定義
Private Sub Workbook_Open()
Call Prime_A_PRJ.Menu_Caption
Call Prime_A_PRJ.Sheet_Lock
ActiveWorkbook.Worksheets("Menu").Select
End Sub
看到你的“ActiveWorkbook”沒!
這個只能在 Excel的VBE中使用,其它環境下都沒有這個“內定物件”的!!!
你在VB6中用這種代碼,不提示“變數未定義”才是怪事。
即使參考了 Excel的物件庫,也不能直接使用“ActiveWorkbook”這個物件吧,
更何況我說的方式,是要求在“工程”中不參考物件庫的。
那個解決了,沒有參考庫,他的代碼是寫在別的工程中,然后再參考的。但是不能在2016上運行,在2010上沒點問題,很奇怪,2016各種錯誤,解決了又有,解決了又有
uj5u.com熱心網友回復:
這個簡單,設計時“參考”,代碼撰寫好后,去掉參考就行了。
凡是用到 WorkBook、WorkSheet之類的“型別”變數,全部改成 Object 型別。
能說說在excel vbe環境下如何解決通用性問題么?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/21815.html
標籤:VBA
