ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 11132|回复: 13

[求助] 如何解决 listview控件 无法装载这个对象,因为它不适用于这台计算机

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-2-15 13:13 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:VBE环境开发
如何解决 listview控件 无法装载这个对象,因为它不适用于这台计算

在自己的电脑上做的窗口有LISTVIEW控件,当移到其它电脑用时,总是会出现无法装载这个对象,如何才能解决这个问题,做到任何时候,移到任何一台电脑上都能用,不需要手动去注册,或者手动去重新画一个LISTVIEW,能不能用代码来自动引用LISTVIEW控件,看了很多资料似乎都没有此问题的解决方法,在这里,想咨询下版内的大师,以及各位版主,有什么好方法,或者提供一个好的思路。因为找资料的过程中发现有N多与我有同样困惑的同学,并且都没有得到有效解决,借此机会,在这里讨论一下有没有解决的可能性,望版主和大虾们多提意见,给个思路,谢谢

点评

知识树索引:5楼,虽然不能彻底解决问题,但可供参考。  发表于 2014-2-15 16:58

TA的精华主题

TA的得分主题

发表于 2014-2-15 13:29 | 显示全部楼层
在03版Excel上做好窗体,在其他版本上都可以用了

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-15 14:06 | 显示全部楼层
CELLS1 发表于 2014-2-15 13:29
在03版Excel上做好窗体,在其他版本上都可以用了

不是版本的问题哦,是在其它电脑上运行,涉及到控件引用,控件注册

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-15 14:37 | 显示全部楼层
有没有遇到相同问题的朋友提供一下方法,思路

TA的精华主题

TA的得分主题

发表于 2014-2-15 14:40 | 显示全部楼层
本帖最后由 lolmuta 于 2014-2-15 15:05 编辑

可否给个附件,这个控件花了我不少时间,还是叫不出来...
列表视图是来自于这个档案MSCOMCTL.OCX对吧...

不过,想要每台电脑都可以跑,
最简单的就是不要使用“高级”的东西。

但若你非常想要用这个附件,可能的解法。我这一块其实也不是很了解,请高手指正错误


附上MSCOMCTL.OCX这个档案,
程式自动引用并非万能...
我有遇到怎麼樣都引不了的情況,也有遇到引用的不同的東西,卻都可以用的怪現象(ieExploree就是個例子),我覺得這塊很少人有說,也沒有什麼規範,特別是不斷的更新的情況下,今天引用這個,明天可能又改版了,
如果是手動引用,上面那種問題,會降低許多,像引用outlook,手動引用會自動判斷版本(其實所謂的自動應該是去註冊表查,然後引用對的版本),但若是自動引用,就沒那麼簡單了

而且要是引用到錯誤的檔案,但是vba又認定成功,程式是不會說你引錯了,當你打開引用列表發現你都有引用啊…然後就不知道該怎麼辦…因为错的不是VBA的错了,而是错在引用的档案里面的东西有问题
其实只要先移除再引用就可以了,不过要引用到对的

所以目前我们的程式就是先看看有没有,有的话,先删除,然后在自动引用

执行以下程式时,你要巨集安全性,信任存取VBA专案物件模型。这句话说白点,就是取得控制VBA编辑器的控制权,
有了控制權,你在編輯器所作的許多事情,其實都是可以用程式來完成的,甚至可以自動寫code,當然就包括引用了。
还要手动引用一个东西
Microsoft Visual Basic的应用程序扩展5.3 ......这个里面有许多可控制编辑器的方法

然后一开始,先取得,要先取得引用的名称。
在跑之前请先不要引用那个listview的物件
请先跑这一段
  1. Private Sub listReference()
  2.     Dim VBAEditor As VBIDE.VBE
  3.     Dim vbProj As VBIDE.VBProject
  4.     Dim chkRef As Reference
  5.    
  6.     Set VBAEditor = Application.VBE
  7.     Set vbProj = Me.VBProject
  8.     Dim BoolExists As Boolean
  9.     For Each chkRef In vbProj.References
  10.         Debug.Print chkRef.Name
  11.     Next

  12.     Set vbProj = Nothing
  13.     Set VBAEditor = Nothing
  14. End Sub
复制代码
結果如下:
VBA-
Excel
stdole
Office
MSForms
VBIDE
这先就是你程式一开始引用的东西,不过缩成简短的名称
然后引用listview的那个东西
VBA
Excel
stdole
Office
MSForms
VBIDE
MSComctlLib

发现多了一个东西,就叫mscomctllib这个名字要记起来。

就可以寫下下面这些代码了, 我只寫出最核心的部份(写在的ThisWorkbook中),詳細代碼請看附件

  1. Private Const listviewFileName As String = "/mscomctl.ocx"


  2. Sub Ini()
  3.     Dim VBAEditor As VBIDE.VBE
  4.     Dim vbProj As VBIDE.VBProject
  5.     Dim chkRef As Reference
  6.     Dim BoolExists As Boolean

  7.     Set VBAEditor = Application.VBE
  8.     Set vbProj = ActiveWorkbook.VBProject

  9.     If ReferenceExist("MSComctlLib") Then
  10.         RemoveReference "MSComctlLib"
  11.     End If
  12.     vbProj.References.AddFromFile Me.Path & listviewFileName
  13.     Set vbProj = Nothing
  14.     Set VBAEditor = Nothing
  15. End Sub
复制代码
確定ini()可以跑後,只要再加上
  1. Private Sub Workbook_Open()
  2. ini
  3. End Sub
复制代码
就会在开启时,自动引用那个东西了。

最后,還是少引用一些怪怪的东西...



tt.rar

409.82 KB, 下载次数: 1004

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-15 15:09 | 显示全部楼层
lolmuta 发表于 2014-2-15 14:40
可否给个附件,这个控件花了我不少时间,还是叫不出来...
列表视图是来自于这个档案MSCOMCTL.OCX对吧...
...

谢谢你的耐心解答,的确这个问题比较复杂,但是却实LISTVIEW这个控件也是用到的频率非常高的,所以想知道这个问题的解决方案

TA的精华主题

TA的得分主题

发表于 2014-4-14 20:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-10-9 09:55 | 显示全部楼层
lolmuta 发表于 2014-2-15 14:40
可否给个附件,这个控件花了我不少时间,还是叫不出来...
列表视图是来自于这个档案MSCOMCTL.OCX对吧...
...

谢谢,按你的方法解决了!困扰了我半个多月。。。

TA的精华主题

TA的得分主题

发表于 2015-3-10 11:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-10-18 20:14 | 显示全部楼层
我是新手,不太明白,是不是我把代码放到“thisworkbook”里面就可以不需要其他电脑使用者再自行注册了?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 00:55 , Processed in 0.035632 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表