导航
  • 全部
...

VBA 引用Excel出现版本问题,求个解决方案

eyesshowme 2016-07-21 02:26:03
在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。
请教下各位高手。
...全文
给本帖投票
3444 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44684295 2019-11-15
  • 打赏
  • 举报
回复
引用 1 楼 <span style="color:#4788C7">舉杯邀明月</span>的回复:
这个简单,设计时“引用”,代码编写好后,去掉引用就行了。 凡是用到 WorkBook、WorkSheet之类的“类型”变量,全部改成 Object 类型。
<br />亲,我刚学excel vba. 发现编有宏代码的工作薄,变换windows版本或excel 版本就不能运行。 能说说在excel vbe环境下如何解决通用性问题么?
青稞一梦 2018-07-05
  • 打赏
  • 举报
回复
引用 7 楼 Chen8013 的回复:
[quote=引用 4 楼 chen602832991 的回复:]
[quote=引用 1 楼 Chen8013 的回复:]
这个简单,设计时“引用”,代码编写好后,去掉引用就行了。
凡是用到 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
[/quote]

看到你的“ActiveWorkbook”没!
这个只能在 Excel的VBE中使用,其它环境下都没有这个“内定对象”的!!!
你在VB6中用这种代码,不提示“变量未定义”才是怪事。

即使引用了 Excel的对象库,也不能直接使用“ActiveWorkbook”这个对象吧,
 更何况我说的方式,是要求在“工程”中不引用对象库的。
[/quote]
那个解决了,没有引用库,他的代码是写在别的工程中,然后再引用的。但是不能在2016上运行,在2010上没点问题,很奇怪,2016各种错误,解决了又有,解决了又有
舉杯邀明月 2018-06-29
  • 打赏
  • 举报
回复
引用 16 楼 zxlrj2018 的回复:
64位Excel不可能直接提供32位COM接口,必须换32位Excel 这句话是对的

呵呵,明显不懂,还瞎胡闹…………

zxlrj2018 2018-06-29
  • 打赏
  • 举报
回复
64位Excel不可能直接提供32位COM接口,必须换32位Excel 这句话是对的
舉杯邀明月 2018-06-28
  • 打赏
  • 举报
回复
引用 14 楼 zhao4zhong1 的回复:
我以前以为64位Excel不可能直接提供32位COM接口,必须换32位Excel

这一点,我倒觉得MS做得不错。

32位程序肯定不能直接运用64位的组件,但若通过合适的“通讯机制”来进行“指挥操作”,
 还是可以实现“看起来32位程序也用上了64位软件功能”一样。
赵4老师 2018-06-28
  • 打赏
  • 举报
回复
我以前以为64位Excel不可能直接提供32位COM接口,必须换32位Excel
赵4老师 2018-06-28
  • 打赏
  • 举报
回复
引用 12 楼 Chen8013 的回复:
[quote=引用 11 楼 zhao4zhong1 的回复:]
VB6(32位)里面能调用64位的Excel对象?
求科普。

Excel的“后台COM进程”是ActiveX EXE进程!
程序中“创建Excel对象”成功后,它是一个独立的进程。
难道它就不能分别实现32位和64位的COM Object接口吗 !!!
 只要这个COM对象实现了与ActiveX EXE的通讯、具体操作由EXE去执行完成了就行。
这样,32位程序,也很方便的“操作”了64位程序……

你也是个老鸟了,这么简单的道理,还要我提醒你?
[/quote]
功夫再高的人不都有练门嘛。
青稞一梦 2018-06-27
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
这个简单,设计时“引用”,代码编写好后,去掉引用就行了。
凡是用到 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
舉杯邀明月 2018-06-27
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
VB6(32位)里面能调用64位的Excel对象?
求科普。

Excel的“后台COM进程”是ActiveX EXE进程!
程序中“创建Excel对象”成功后,它是一个独立的进程。
难道它就不能分别实现32位和64位的COM Object接口吗 !!!
 只要这个COM对象实现了与ActiveX EXE的通讯、具体操作由EXE去执行完成了就行。
这样,32位程序,也很方便的“操作”了64位程序……

你也是个老鸟了,这么简单的道理,还要我提醒你?
赵4老师 2018-06-27
  • 打赏
  • 举报
回复
VB6(32位)里面能调用64位的Excel对象?
求科普。
舉杯邀明月 2018-06-27
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
原来我把VBA当VB6了!

不管是VBA(非Excel环境下的VBE),还是VB6,如果要使用“Ecxel对象”的话,方法几乎是一样的。

赵4老师 2018-06-27
  • 打赏
  • 举报
回复
原来我把VBA当VB6了!
舉杯邀明月 2018-06-27
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
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位,
运行完全正常。
舉杯邀明月 2018-06-27
  • 打赏
  • 举报
回复
引用 4 楼 chen602832991 的回复:
[quote=引用 1 楼 Chen8013 的回复:]
这个简单,设计时“引用”,代码编写好后,去掉引用就行了。
凡是用到 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
[/quote]

看到你的“ActiveWorkbook”没!
这个只能在 Excel的VBE中使用,其它环境下都没有这个“内定对象”的!!!
你在VB6中用这种代码,不提示“变量未定义”才是怪事。

即使引用了 Excel的对象库,也不能直接使用“ActiveWorkbook”这个对象吧,
 更何况我说的方式,是要求在“工程”中不引用对象库的。
赵4老师 2018-06-27
  • 打赏
  • 举报
回复
Excel2016分32位/64位吧。我猜。
赵4老师 2018-06-27
  • 打赏
  • 举报
回复
在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
舉杯邀明月 2016-07-21
  • 打赏
  • 举报
回复
没有引用,Set Excel = CreateObject("Excel.Application")这句报错? 不可能吧! VB6、VBS之类的,都可以正常执行。
eyesshowme 2016-07-21
  • 打赏
  • 举报
回复
依然报错,显示CAD2014中“自动化(Automation)错误”
舉杯邀明月 2016-07-21
  • 打赏
  • 举报
回复
这个简单,设计时“引用”,代码编写好后,去掉引用就行了。 凡是用到 WorkBook、WorkSheet之类的“类型”变量,全部改成 Object 类型。

2,503

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部