(A)方案:
regedit——进入注册表,选中注册表树的最上级——计算机,然后点击——编辑——查找,输入要找的DLL名,找到后删除,再点击——查找下一个,一个个删除干净!!!
假设要删除的为“宏通Excel助手”
注册表查询"宏通Excel助手","宏通Excel助手",找到后连上级目录删除
(B)方案:VBE工程可以使用的引用管理(含删除)解决方案终极版
VBE环境中有一个可以让程序开发人员使用的引用工具,包括个人开发的DLL、类型库,由于种种原因引用后转移了目录,导致工具中出现过剩不可用或者不必要的引用,一般的操作是通过注册表查找guid后删除相关子项来解决,能不能直接在VBA环境操作工程可以使用的引用呢,比如查看,删除等。几年前我在VB环境下做过类似的开发工作,今天偿试了一下移值到VBA中,发现是可以的,由于代码量较大,对该VBA需要引用到的ISHF_EX.tlb类型库,我没有进行改写,大伙在使用时记得别忘了引用了。顺便说一句,类库是为了减少代码开发量,记录相关组件的接口的文件,可以用记事本写成olb,然后借助VC或者从其中抽出来的MKYTPLIB.EXE(网上很多下载)生成tlb文件,有需要的类型库源码可以向我要。对于删除可以使用的引用,我留下了代码,没有在窗体上加按钮,大伙自行加就是了。
http://club.excelhome.net/thread-855013-1-1.html
3、ActiveX 部件不能创建对象或返回对该对象的引用(错误 429)
请参阅
创建对象要求该对象的类已在系统注册表中注册,而且任何相关的动态链接库 (DLL)必须能使用。此错误有以下的原因和解决方法:
类没有注册。例如,系统注册表中没有类的说明,或虽有类说明,但找不到文件,或指定的文件类型错误。
如果可能的话,试着启动对象的应用程序。如果注册信息过期或错误,应用程序应该检查注册表并更正信息。如果启动应用程序没有解决问题,请重新执行应用程序的安装程序。
对象需要的 DLL 不能使用,可能因为找不到,或是已损坏。
确保所有相关的 DLL 都可使用。例如,Data Access Object (DAO) 需要支持多平台的 DLL。如果这是造成错误的原因,则要为此对象重新执行安装程序。
对象在机器上使用,但它是授权的 Automation 对象,而且在具体的例子授权中不能确认可用。
一些对象在部件找到授权键后,才能被具体的例子说明,并且在当前的机器上的实例说明中,确认对象已被注册。当通过正确安装的类型库或对象库对一个对象进行引用时,就能自动提供正确的键。
如果 CreateObject 或 GetObject 的调用结果,是用例子说明,那么,对象必须找到键。在这种情况,它会搜寻系统注册表或查找它在安装时建立的指定文件,例如,扩展名为 .lic 的文件。如果此键找不到,则对象不能被说明。如果用户建立对象应用程序,删除必须文件,或改变系统注册表,则对象不能找到此键。如果此键找不到,对象也不能用例子说明。实例说明可在开发系统中工作,但不能在用户系统中。它对用户重装登记的对象是必须的。
使用 GetObject 函数获得用 Visual Basic 所创建类的引用。
GetObject 不能获得用 Visual Basic 所创建类的引用。
对该对象的访问显式地被拒绝。
例如,试图访问当前正在使用的数据对象,且此对象已被锁定以防止死锁情形发生。如果是这样的情形,可以在其他时间去访问对象。
详细信息,可选取有问题的项目,并按下 F1 (在Windows中)或HELP(在Macintosh中)键。
这个是注册, 不是引用,引用要在注册后,再在VBE中的工具-引用中添加,或者用代码操作
HKEY_CLASSES_ROOT下的TYPELIB,查找DLL名,删除,就可以了。
通过将Excel VBA代码封装成DLL,可有效防止代码被非法查看。方法/步骤:
(1)注册Dll文件(不是引用)
注册dll,一般情况下,为了经常使用,建议将dll复制到系统盘的windows/system32目录,如果不是的,有时候需要加上dll的完整路径.
为什么DLL文件要用Regsvr32注册后才能使用?用Regsvr32注册Dll文件起到什么作用?Regsvr32命令注册dll文件时,都注册了那些内容,是dll文件的位置吗?
使用dll文件的应用程序是利用dll文件的入口函数调用的,windows系统知道与否有什么关系?又不是windows系统调用dll文件?
普通DLL是不用注册嘀.只有com组件才需要注册,注册时他把clsid和progid(可选)及DLL的路径写到注册表中.
于是用这些组件的客户端在创建该组件时就不用知道他的路径.
只需调用cocreateinstance并传入clsid,系统就能创建该组件的实例了.
注册:
regsvr32 /s winshow.dll
反注册:
regsvr32 /u winshow.dll
双击“ThisWorkBook”,选择“Open”事件和“BeforeClose事件上”,并输入以下代码,用于在文档打开时注册DLL,以及关闭时反注册DLL。(注:Chr(34) 是双引号)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
Private Sub Workbook_Open()
End Sub
EXCEL档案放在桌面,DLL也在桌面,上面代为什么不能自动引用?这个是注册, 不是引用,
HKEY_CLASSES_ROOT下的TYPELIB,查找DLL名,删除,就可以了。
还有注册了的DLL如何在引用中清除,在注册表里清除?
引用要在注册后,再在VBE中的工具-引用中添加,或者用代码操作。
打开Excel 2007,按键盘组合键“Alt+F11”进入VBA编程环境。点击“工具”→“引用”选项,在打开的“引用”窗口中,点击“浏览”按钮。
在随后打开的“浏览文件”窗口中,找到上一节生成的“feifeidown.dll”文件,点击“确定”进行添加,在返回的“引用”窗口中,确保勾选“feifeidown”,然后点击“确定”按钮完成。
注:如果DLL文件位置发生变化,只将用选中这个
(3)编写代码调用DLL
右击“Excel对象”,选择“插入”→“模块”,在模块中输入以下代码:
Sub Test()
按下键盘快捷键“F5”,在打开的“宏”窗口中选择“Test”,点击“运行”,然后就可以在Sheet1工作表中看到效果啦。
最后将该过程添加到“ThisWorkBook”的启动菜单中,即可实现在打开文档中自动运行宏的目地。
2、COM加载宏封装自定义函数并全自动安装最简实例
http://club.excelhome.net/thread-701984-1-1.html
1.自动注册你的COM加载宏,并自动COM加载宏名称到Excle加载宏列表中。
2.可自定义安装程序界面,标题、版本、版权等信息。
3.引用wxhnr的话“就是不管是谁写的DLL,都能使用同一个注册程序。”
安装完成后,COM加载宏中的自定义函数已经可以直接使用了。
自定义信息及方法见install.txt文件
补1:补充一个自定义函数封装的简单示例。
补2:补充一个自定义函数安装的简单示例。
补3:补充一个加载安装自动化的简单示例。(17楼有说明)
补4:补充一个无须注册及引用的简单示例。(比较一下调用api函数的例子)
补5:最后补充第一附件的源码(总版给个精华不放源码不合时宜了)
COM技术的本质是在系统里注册一个类库(COM的类工厂)——不在乎是EXE还是DLL——白俗一点来说,这一点的技术过程原理就是必须有管理员权限对系统(注册),以指明类库的实体代码在哪里,
一般情况下在WINDOWS里呢,你们看到的就是以管理员用户手工打入命令行 regsvr32 某某DLL或某EXE,这一步本来是手工的,
变成SETUP关系也不大,因为有很多安装打包程序会自动帮你把COM组件捆绑到INSTALL或SETUP程序里,标准的开发软件不论VB还是NET还是第三方的商业软件都有这类东东,但记住只要注册COM,管理员权限是少不了的。
但搞到要研究自已手工去做,还能完全解决“自动注册、自动安装”的问题,大多数情况就有点本末倒置了,这是我个人的建议。
当然,如果只是调用DLL或EXE文件实体本身的函数入口,不要求注册一个系统类库的话,就没有上面的问题,这是早期的动态DLL做法。但是呢那个但是,它同样有对应的优缺点,缺点就是任何程序调用必须指定这个函数的实体文件位置,而不是现在COM和自动化简单的引用,WINAPI风格的函数就是这类了。
补充一下,一般“正常”的SETUP程序把需要的组件绑定了会这么做:
检测系统里有没有注册某个特定的X类库
比如说,这个APP运行的必要组件是DIRECTX 11和 DDT 3.5 (后面一个是我胡扯的,某个第三方组件,假定它很少人安装)
而用户目前的系统装了DIRECTX 17(笑),它是DIRECTX 11向下兼容,返回一个DIRECTX 类库的 11的检测信号,也就是DIRECTX 11组件 安装 TRUE,
但是用户没有装DDT 3.5或装了DDT 8.0 ,由于这个开发者的问题,即使装了DDT 4以上的版本,它们能兼容完成DDT 3.5所有功能,但都不能对SETUP发出的 DDT 3.5检测返回 TURE,
于是SETUP认为,DIRECTX 11组件是安装了,DDT 3.5没有安装,必须安装其中的DDT3.5,它会查找自身或指定位置(比如网络上、DVD指定目录上)的DDT3.5组件
装完以后再回到1检测
----------------------------关于VBE引号套用引号问题
如果在VBE中出现引号套用引号,则里面的引号需要用“”“”。
Range("i2").Value = "=IF(OR(AND(G2>=2/24000,G2<5/24),AND(G2=""--"",OR(C2<1,E2<1))),0.5,IF(AND(G2>=5/24,G2<=8/24),1,0))"
上面的--的引号,使用了双重引号""--""!否则“--”出现错误。