各位前辈,版主好。
本人在win10 64位家庭版用VB6编的程序在win7上运行不了,在一个同事的win10上也运行不了,具体如下:
本人系统平台如下:win10家庭版,office 2013
1)我的程序在VB6平台上编写,调用调用excel在用户窗体上输入数据,并保存为excel 的xls格式文件及制表符分隔的.txt文件。
2)在setup factory 9.1下打安装包,在大部份的win10下正常安装运行,但在一个同事的win10家庭版及excel 2010上安装正常,但运行时打不开我指定的excel文件模板,返回错误号为:-2147021892 ,程序代码如下:On Error Resume Next Set ExlWorkBook = Exlapp.Workbooks.Open(App.Path & "\Spec_Upld_Template.xls")
3)在win7正安装正常,运行时提“未预期错误”。
跪求大神指点,感谢,感谢,感谢!
本人在win10 64位家庭版用VB6编的程序在win7上运行不了,在一个同事的win10上也运行不了,具体如下:
本人系统平台如下:win10家庭版,office 2013
1)我的程序在VB6平台上编写,调用调用excel在用户窗体上输入数据,并保存为excel 的xls格式文件及制表符分隔的.txt文件。
2)在setup factory 9.1下打安装包,在大部份的win10下正常安装运行,但在一个同事的win10家庭版及excel 2010上安装正常,但运行时打不开我指定的excel文件模板,返回错误号为:-2147021892 ,程序代码如下:On Error Resume Next Set ExlWorkBook = Exlapp.Workbooks.Open(App.Path & "\Spec_Upld_Template.xls")
3)在win7正安装正常,运行时提“未预期错误”。
跪求大神指点,感谢,感谢,感谢!
程序中需要用到Excel等“第三方进程”来操作,竟然还敢 On Error Resume Next
用了这个,还想找到“错误原因”! 洗洗睡吧…………
以前我以为用“静态库”程序,不同版本的“excel对象”可能会有问题。
不过前段时间我试了一下(静态引用tlb,测试Excel对象进程是否能正常创建):
WinXP+2003 编译的程序,在Win 7 + 2007运行正常;
Win 7 +2007 编译的程序,以WinXP + 2003下也同样正常。
既然Excel对象进程成功创建了,其它操作基本没什么问题了,
在我的程序中,主要就是读、写Excel文档数据,基本没有搞什么图表、Shaps对象之类的。
不过,还是觉得,即使要搞这些操作,问题也应该不大,重点还是进程对象能否创建、启动这儿。别的我也不想多说了,反正这些,楼主都是无视的。
之后还报错,应该已经是程序的第二个错误了
看起来这个错误像是版本问题,
建议不要静态引用,改用CreateObject动态创建对象试试
'On Error Resume Next
Set Exlapp = CreateObject("Excel.Application") '新建Excel应用进程
'Set Exlapp = New excel.Application
welcome.inisms.Caption = "正在检测Micosoft Excel Application 是否安装..."
If Err Then
MsgBox "检测到本机尚未安装或未正确安装 Micosoft Excel Application! 程序不能断续运行!" & Chr(13) & "错误代码:" & Err
Err.Clear
Unload welcome
End
End If
welcome.inisms.Caption = "正在加载Florens Datasheet 模板..."
Exlapp.DisplayAlerts = False '关闭Excel所有警告
'On Error Resume Next
Set ExlWorkBook = Exlapp.Workbooks.Open(App.Path & "\Spec_Upld_Template.xls") '打开本应用路径下的Florens Upload File 模板
If Err Then
MsgBox "在本程序路径下未找到 Spec_Upld_Template.xls 模板,系统不能初始化!即将终止运行!" & Chr(13) & "错误代码:" & Err
Err.Clear
If welcome.Visible Then Unload welcome
ExlWorkBook.Close
Exlapp.DisplayAlerts = True
Exlapp.Quit
Set ExlWorkBook = Nothing
Set Exlapp = Nothing
End
End If
StatusBar1.Panels(1).Text = "Excel应用实例已创建,Spec_upld_Template.xls 模板已正确加载!"
SSTab1.TabEnabled(1) = False
SSTab1.TabEnabled(0) = True
SSTab1.Tab = 1
SSTab1.TabVisible(1) = True
VScroll1.Max = Cerworkspace.Height - ACspace.Height + 375
VScroll1.Min = 1
VScroll1.SmallChange = 380
VScroll1.LargeChange = 1900
SSTab1.Tab = 0
'Sleep 1000
Unload welcome
End Sub
以前我以为用“静态库”程序,不同版本的“excel对象”可能会有问题。
不过前段时间我试了一下(静态引用tlb,测试Excel对象进程是否能正常创建):
WinXP+2003 编译的程序,在Win 7 + 2007运行正常;
Win 7 +2007 编译的程序,以WinXP + 2003下也同样正常。
既然Excel对象进程成功创建了,其它操作基本没什么问题了,
在我的程序中,主要就是读、写Excel文档数据,基本没有搞什么图表、Shaps对象之类的。
不过,还是觉得,即使要搞这些操作,问题也应该不大,重点还是进程对象能否创建、启动这儿。别的我也不想多说了,反正这些,楼主都是无视的。
不一定的,关键看调用的函数或方法是否兼容。
比如一个 activex dll 1.0版本里面有一个原型为 test( a as string) as long 的函数。在2.0版本里这个函数改为 test( a as string, optional b as string) as long并且项目做了二进制兼容那么引用了1.0版本的代码编译出来的exe放在注册了2.0版本的电脑上,一切正常。
引用2.0版本编译出来的,在注册1.0版本的机器上,创建对象不会出错,但一旦调用这个test就会出问题,即使只传一个参数。
这种兼容问题曾经困扰我们公司很久,编译一不小心就会出问题。后来专门写了个程序来检查所有com组件的兼容性。