| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1725 人关注过本帖, 1 人收藏
标题:虚心请教:VB6能用代码进行前期绑定吗?
只看楼主 加入收藏
vitrel
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2023-11-13
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:5 
虚心请教:VB6能用代码进行前期绑定吗?
我是VB菜鸟,最近在用VB6编写一小程序时遇到点问题特向各位请教一下。

我所编写的小程序需要调用Excel生成并保存一个工作簿文件,
于是在工程→引用→勾选了“Microsoft Excel 16.0 Object Library”,
然后Set xlApp = CreateObject("Excel.Application"),程序在本机运行一切正常。

现有几个问题:
1、引用“Microsoft Excel 16.0 Object Library”时,有个16.0的版本号,如果将程序移到安装其他版本Excel的电脑上运行,理论上就会出错,网友们会怎么处理呢?

2、要生成工作簿文件,理论上除了Excel外,WPS的表格也是可以的,而且操作方法理论上是相同的,而且事实上,国内使用WPS的人也是越来越多。
在编程时,有什么好的思路,使程序即适应安装Excel的电脑,又适应安装WPS的电脑呢?

3、关于第2个问题,VBA里面有一个较好的方法,就是用代码进行前期绑定,就是不用在引用列表中勾选,而使用以下代码进行绑定:
ThisWorkbook.VBProject.References.AddFromGuid "{00020813-0000-0000-C000-000000000046}", 1, 9    '绑定Excel对象
ThisWorkbook.VBProject.References.AddFromGuid "{00020905-0000-0000-C000-000000000046}", 8, 7    '绑定Word对象
ThisWorkbook.VBProject.References.AddFromGuid "{91493440-5A91-11CF-8700-00AA0060263B}", 2, 12    '绑定PPT对象
ThisWorkbook.VBProject.References.AddFromGuid "{420B2830-E718-11CF-893D-00A0C9054228}", 1, 0    '绑定字典对象
如果是用代码进行绑定,则在应付不同版本的Excel、或者当电脑上安装的不是Excel而是WPS时,便会变得灵活很多,
但我在网上找了一圈,也没发现VB6有类似的用代码进行前期绑定的方法,真是这样吗?

以上有3个问题,看似比较多,但其实都是同一类问题,希望网友们别嫌我太贪心。
网友们如果对上述任一问题有什么心得的,请不吝指点,感谢感谢!
搜索更多相关主题的帖子: 代码 Excel 绑定 VB6 对象 
2023-11-13 16:13
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:232
专家分:1781
注 册:2023-6-29
收藏
得分:10 

Set xlApp = CreateObject("EXCEL.Application")
然后判断是否有错误,
有错误,再
Set xlApp = CreateObject("ET.Application")
还有第三种引用,那就再判断下去
Set xlApp = CreateObject("KET.Application")
只要有一个引用成功,就继续程序,否则就中断。这些控件操作excel的方法基本都是一样的,都兼容


代码参考:
On Error Resume Next        '错误继续
Err.Clear                   '清除错误表
Set xlApp = CreateObject("EXCEL.Application")
If Err.Number <> 0 Then     '是否有错误
    Set xlApp = CreateObject("ET.Application")
        If Err.Number <> 0 Then     '是否有错误
            '还可以继续判断其他控件....
            MsgBox "程序发生致命错误,无法继续", vbCritical
            End
        End If
End If
2023-11-13 18:52
约定的童话
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:56
帖 子:246
专家分:1442
注 册:2021-8-1
收藏
得分:10 
采用2楼的方法吧,正解
2023-11-13 20:06
冬瓜汤
Rank: 2
等 级:论坛游民
威 望:1
帖 子:18
专家分:75
注 册:2023-1-30
收藏
得分:0 
回复 楼主 vitrel
vb6和vba是不一样的。vb6在调试的时候和vba一样是需要tlb文件,但编译完之后是不需要tlb文件。
象msoffice这样带有版本的兼容性。最好的办法是 把excel.exe里面的tlb单独分离出来,为了最大兼容性,一般选择
excel2010或更低的版本(看你所处的环境)。用reshacker或其它工具,把excel.exe 资源里面的tlb分离出来。
vb6引用的是这个excel2010的tlb,这就是前期绑定。vb6编译成exe或dll之后,它会自动兼容 excel的任何更高的版本,而且
再也不需要这个excel2010.tlb。

缺点是:比excel2010更高的版本新增加的功能,你可能用不上。因为excel2010.tlb里面没有这些新增的功能。
不过 msoffice新增的功能是极其有限,或者说新增的功能,你大多数也用不上。✅ 启动解除复制限制✅ 启动解除右键限制✅ 启动解除键盘限制

[此贴子已经被作者于2023-12-22 10:46编辑过]

2023-12-22 10:44
vitrel
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2023-11-13
收藏
得分:0 
首先,感谢2~4楼3位网友的回答。
说来惭愧,我在提出问题后第二天想上论坛看看有没有人回答,结果网站的网址一直无法打开,连续试了很多天一直如此,
后来就没再试了,今天突然想起来,打开一看,结果终于可以连上了,原来已经有3位热心的网友给我解答了,再次感谢3位的回答,
我来晚了,并非我没礼貌,而是事出有因,望见谅!

这个问题我后来也解决了,我解决的思路是,放弃前期绑定,改用后期绑定。
就是放弃在工程里引用,而是改用Dim xlApp As Object: Set xlApp = CreateObject("Excel.Application")
因为我发现,虽然Set xlApp = CreateObject("Excel.Application")中写的是“Excel”,
但在纯Microsoft Office、或纯金山WPS、或既安装Microsoft Office又安装金山WPS的系统中,
这句Set xlApp = CreateObject("Excel.Application")都不会出错,而且都能正常引用到Microsoft Excel或金山WPS的表格软件,
而对于既安装Microsoft Office又安装金山WPS的系统,这个被引用到的“Excel.Application”是哪一个,就要看哪个才是xls、xlsx的默认打开程序了,
总的来说,Dim xlApp As Object: Set xlApp = CreateObject("Excel.Application")可以应对各种情况,而且不用考虑软件的版本号,这就是我的解决方案。
事实上,我也在好几如不同情况的电脑上测试过,程序确实也能正常运行。

对于2、3楼网友的意见,思路非常不错,比我的严谨很多,很实用,我虚心接受,感谢感谢。
对于4楼网友的意见,这思路非常新颖,我是第一次看到,感谢您让我开眼界了,感谢感谢!
2024-01-02 09:55
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1934
专家分:3012
注 册:2009-12-22
收藏
得分:0 
请用VBS的方法,能不引用尽量别引用,这样可增加程序的可移植性。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2024-01-04 09:27
快速回复:虚心请教:VB6能用代码进行前期绑定吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024645 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved