win7出现ActiveX component can't create object

时间:2022-02-25 01:58:55
将listview的内容导出到excel保存,下面这段代码在xp的excel2003下正常导出,可到win7的excel2007
就出现ActiveX component can't create object提示,不知道是怎么回事,网上找了很久,都没有解决方案。

    Dim i As Integer
    Dim ex As Object
    Dim ExWbook As Object
    Dim ExSheet As Object
    Set ex = CreateObject("Excel.Application")
    Set ExWbook = Nothing
    Set ExSheet = Nothing
    Set ExWbook = ex.Workbooks().Add
    Set ExSheet = ExWbook.Worksheets("Sheet1")
    ex.Range("A" & 1).Value = ListView1.ColumnHeaders(1).Text
    ex.Range("B" & 1).Value = ListView1.ColumnHeaders(2).Text
    ex.Range("C" & 1).Value = ListView1.ColumnHeaders(3).Text
    ex.Range("D" & 1).Value = ListView1.ColumnHeaders(4).Text
    ex.Range("E" & 1).Value = ListView1.ColumnHeaders(5).Text
    ex.Range("F" & 1).Value = ListView1.ColumnHeaders(6).Text
    ex.Range("G" & 1).Value = ListView1.ColumnHeaders(7).Text
    ex.Range("H" & 1).Value = ListView1.ColumnHeaders(8).Text
    For i = 2 To ListView1.ListItems.Count + 1
        ex.Range("A" & i).Value = ListView1.ListItems(i - 1).Text
        ex.Range("B" & i).Value = ListView1.ListItems.Item(i - 1).SubItems(1)
        ex.Range("C" & i).Value = ListView1.ListItems.Item(i - 1).SubItems(2)
        ex.Range("D" & i).Value = ListView1.ListItems.Item(i - 1).SubItems(3)
        ex.Range("E" & i).Value = ListView1.ListItems.Item(i - 1).SubItems(4)
        ex.Range("F" & i).Value = ListView1.ListItems.Item(i - 1).SubItems(5)
        ex.Range("G" & i).Value = ListView1.ListItems.Item(i - 1).SubItems(6)
        ex.Range("H" & i).Value = ListView1.ListItems.Item(i - 1).SubItems(7)
    Next i
ExSheet.Columns("A:H").AutoFit
    On Error Resume Next
    ExWbook.SaveAs App.Path & "\Excel\" & Format(Now, "yyyy-mm-dd") & ".xls"
    On Error GoTo 0
    ex.Quit
    Set ex = Nothing

6 个解决方案

#1


在工程中,对excel的引用去除

#2


试过了,问题依旧。就是不引用microsoft excel excel 11.0 或12.0

#3


·首先,确保 Office 2007 是用了完全安装而不是即需安装。
·其次,用 regedit 确认一下( 手边只有 Office 2003,版本号是推测出来的,以实际为准):
 HKEY_CLASSES_ROOT\Excel.Application\CurVer\ 的默认值应该是 "Excel.Application.12" 吧;
 HKEY_CLASSES_ROOT\Excel.Application.11\CLSID\ 和 HKEY_CLASSES_ROOT\Excel.Application\CLSID\ 的默认值应该相同。
·再次,可能是插件问题,参考 http://ju.xin.blog.163.com/blog/static/38296516201010241011775/
·还有,用 Word.Application 创建对象试试是否成功,确定是否仅仅是 Excel 的问题。

#4


现在单位只有xp系统,注册表看到的CLSID数值是一致的,CurVer的默认值是 "Excel.Application.11" ,家里用的是ghost win7的旗舰版,Office 2007 安装不完全的可能性很大,软件用户也碰到ActiveX component can't create object相同的错误问题,晚上回去再用你的方法查一下注册表,我想最好的情况当然是叫用户重装office2007,不过现在win7开始流行了,每台电脑都叫重装office也不是办法,只能看这个方法如果行的通的话,弄个注册表文件让用户点击注册一下,或者有什么工具修复一下更好。当然如果有朋友知道有其他原因导致这个错误,也有解决办法就更好了。

#5


你的程序本来就是依赖别人的程序而开发的,这种依存关系对运行环境的要求是很高的,所以出现这种问题一点也不奇怪,应该是在你使用这种技术架构的时候就应该预料到的问题。要想彻底解决这类问题,最好的办法就是不要这样依存别人的程序来开发自己的软件,这就不会受限于别人程序是否安装或安装的版本环境问题。对于Excel 的数据文件应用,其实网上也有很多源码可以直接处理的,比如 WEB 开发上就有可以动态生成 Excel 文件供别人下载数据的东西,而且还开源。起码我见过 PHP 的,支持 Excel、Word、PDF 等等多种文件的动态处理模块,里面有完整的文件格式和相关处理类的代码,如果把这种东西转换成自定义类来处理,就不用担心别人的系统是否安装 Office 或安装的版本是什么而烦恼了,当然也不会出现这种组件、控件的版本或兼容性问题。

#6


引用 5 楼 SupermanKing 的回复:
你的程序本来就是依赖别人的程序而开发的,这种依存关系对运行环境的要求是很高的,所以出现这种问题一点也不奇怪,应该是在你使用这种技术架构的时候就应该预料到的问题。要想彻底解决这类问题,最好的办法就是不要这样依存别人的程序来开发自己的软件,这就不会受限于别人程序是否安装或安装的版本环境问题。对于Excel 的数据文件应用,其实网上也有很多源码可以直接处理的,比如 WEB 开发上就有可以动态生成 Exc……

说得很有道理。

#1


在工程中,对excel的引用去除

#2


试过了,问题依旧。就是不引用microsoft excel excel 11.0 或12.0

#3


·首先,确保 Office 2007 是用了完全安装而不是即需安装。
·其次,用 regedit 确认一下( 手边只有 Office 2003,版本号是推测出来的,以实际为准):
 HKEY_CLASSES_ROOT\Excel.Application\CurVer\ 的默认值应该是 "Excel.Application.12" 吧;
 HKEY_CLASSES_ROOT\Excel.Application.11\CLSID\ 和 HKEY_CLASSES_ROOT\Excel.Application\CLSID\ 的默认值应该相同。
·再次,可能是插件问题,参考 http://ju.xin.blog.163.com/blog/static/38296516201010241011775/
·还有,用 Word.Application 创建对象试试是否成功,确定是否仅仅是 Excel 的问题。

#4


现在单位只有xp系统,注册表看到的CLSID数值是一致的,CurVer的默认值是 "Excel.Application.11" ,家里用的是ghost win7的旗舰版,Office 2007 安装不完全的可能性很大,软件用户也碰到ActiveX component can't create object相同的错误问题,晚上回去再用你的方法查一下注册表,我想最好的情况当然是叫用户重装office2007,不过现在win7开始流行了,每台电脑都叫重装office也不是办法,只能看这个方法如果行的通的话,弄个注册表文件让用户点击注册一下,或者有什么工具修复一下更好。当然如果有朋友知道有其他原因导致这个错误,也有解决办法就更好了。

#5


你的程序本来就是依赖别人的程序而开发的,这种依存关系对运行环境的要求是很高的,所以出现这种问题一点也不奇怪,应该是在你使用这种技术架构的时候就应该预料到的问题。要想彻底解决这类问题,最好的办法就是不要这样依存别人的程序来开发自己的软件,这就不会受限于别人程序是否安装或安装的版本环境问题。对于Excel 的数据文件应用,其实网上也有很多源码可以直接处理的,比如 WEB 开发上就有可以动态生成 Excel 文件供别人下载数据的东西,而且还开源。起码我见过 PHP 的,支持 Excel、Word、PDF 等等多种文件的动态处理模块,里面有完整的文件格式和相关处理类的代码,如果把这种东西转换成自定义类来处理,就不用担心别人的系统是否安装 Office 或安装的版本是什么而烦恼了,当然也不会出现这种组件、控件的版本或兼容性问题。

#6


引用 5 楼 SupermanKing 的回复:
你的程序本来就是依赖别人的程序而开发的,这种依存关系对运行环境的要求是很高的,所以出现这种问题一点也不奇怪,应该是在你使用这种技术架构的时候就应该预料到的问题。要想彻底解决这类问题,最好的办法就是不要这样依存别人的程序来开发自己的软件,这就不会受限于别人程序是否安装或安装的版本环境问题。对于Excel 的数据文件应用,其实网上也有很多源码可以直接处理的,比如 WEB 开发上就有可以动态生成 Exc……

说得很有道理。