各位前辈,版主好。
本人在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正安装正常,运行时提“未预期错误”。
跪求大神指点,感谢,感谢,感谢!

解决方案 »

  1.   

    On Error Resume Next
    程序中需要用到Excel等“第三方进程”来操作,竟然还敢 On Error Resume Next
    用了这个,还想找到“错误原因”! 洗洗睡吧…………
      

  2.   

    我觉得不是这么回事。
    以前我以为用“静态库”程序,不同版本的“excel对象”可能会有问题。
    不过前段时间我试了一下(静态引用tlb,测试Excel对象进程是否能正常创建):
    WinXP+2003 编译的程序,在Win 7 + 2007运行正常;
    Win 7 +2007 编译的程序,以WinXP + 2003下也同样正常。
    既然Excel对象进程成功创建了,其它操作基本没什么问题了,
     在我的程序中,主要就是读、写Excel文档数据,基本没有搞什么图表、Shaps对象之类的。
     不过,还是觉得,即使要搞这些操作,问题也应该不大,重点还是进程对象能否创建、启动这儿。别的我也不想多说了,反正这些,楼主都是无视的。
      

  3.   

    试试不直接调用 Excel 组件,而是用 Jet Engine 将 Excel 文件作为外部数据库来处理。
      

  4.   

    On Error Resume Next
    之后还报错,应该已经是程序的第二个错误了
    看起来这个错误像是版本问题,
    建议不要静态引用,改用CreateObject动态创建对象试试
      

  5.   

    我是用CreateObject, 如下:Private Sub Form_Load()                '本应用启动加载内容
       '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
      

  6.   

    我觉得不是这么回事。
    以前我以为用“静态库”程序,不同版本的“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组件的兼容性。
      

  7.   

    各位前辈,我的程序在个别win10打不开Spec_upld_Template.xls模板问题已解决,是因为同事的excel2010打开此模板提示模板视图受保护(我的这个模板是加密保护的,防止更改),在打开打模板后确认打开后,再次在excel打开此模板就没有提示视图受保护了,再在程序导入就正常了。谢谢各位的思路指引。感谢。但win7运行不了问题还在。
      

  8.   

    我在一个论坛上看到有其它的前辈说VB程序在win7上运行提示“未预期错误”问题是由于程序图标不兼容32位的图标,可有此事?我理解不了如此问题!!!
      

  9.   

    vb6在win7上跑因为兼容性问题吧!
      

  10.   

    win7的未预期错误有错误代码么?
      

  11.   

    我都是在XP+Excel2003 环境下编译的,到win7时,最不济还可选择 以XP兼容模式运行
      

  12.   

    各位好,本程序在win7平台运行提示“未预期错误"问题已解决,问题归咎为程序图标不兼容,把图标做为24位真彩后编译,打包,安装,在win7下运行正常了。谢谢各位。
      

  13.   

    把Win7调整到classic mode可以试试看