VBA - "available references"存储在哪里?



在Excel(或其他MS Office应用程序(中,当您转到VBA IDE时,"工具,引用"列表将显示当前选定的程序集以及可以通过选中标记来添加的其他程序集的列表。您也可以点击浏览导航到包含 .您自己制作的TLB文件。

但是有一个问题。假设您浏览到C:\Fubar\PumpHandle.tlb并添加它。一切正常。一周后,您取消选中该引用,因为在您正在处理的 VBA 项目中不需要它。没问题:PumpHandle 仍在"可用引用"列表中 - 只是没有选中。

一周后,你删除了C:\Fubar\PumpHandle.tlb。现在进入VBA IDE,工具,引用和PumpHandle仍在列表中,无法将其删除。啊啊啊如果你勾选它,你当然会收到一条错误消息,因为PumpHandle.tlb文件不存在。如何将其从"可用引用"列表中删除?我尝试搜索注册表并删除对 PumpHandle.tlb 的所有引用,但它仍然显示在"可用引用"列表中。我尝试在%APPDATA%中到处搜索,但我也无法在那里的任何地方找到PumpHandle。最后,我看了一下.xls里面?--> .zip Personal.xlsb 的文件,但在那里找不到它。

那么 - 机器在哪里存储(过时的和不可用的,但高度混乱的(参考?我怎样才能摆脱它?

此列表是从注册表加载的。当您运行命令行regsvr32.exe(普通 COM( 或regasm.exe(.NET COM( 时,该信息将放入注册表中。这通常发生在安装时,并在卸载时清理。删除文件不会将其从列表中删除。

注册表中可能存在几个位置,具体取决于它是 32 位还是 64 位类型库,以及它是为所有用户注册还是仅注册当前用户。下面的列表(大致(按最常见到最不常见的顺序排列。

  • HKEY_LOCAL_MACHINE\软件\类\类型库
  • HKEY_LOCAL_MACHINE\软件\WOW6432Node\Classes\TypeLib
  • HKEY_CURRENT_USER\Software\Classes\TypeLib

我不知道它们存储在哪里。 然而,也许这会让你到达你想去的地方。

' You need to add a reference to Microsoft Visual Basic for Applications Extensibilty
Sub ZapReference()
Dim VBAEditor As VBE, VBProj As VBProject, VBRef As Reference
Set VBAEditor = Application.VBE
Set VBProj = ActiveWorkbook.VBProject

For Each VBRef In VBProj.References
If VBRef.IsBroken Then
Debug.Print "Removing: ", VBRef.Name, VBRef.FullPath
VBProj.References.Remove VBRef
End If
Next VBRef
End Sub

最新更新