首页 > 解决方案 > 更改引用库的位置

问题描述

我有一个在 Excel VBA 项目中使用的 C# 库。我现在希望重组我的项目并将库移动到不同的文件夹。但是,在删除对库的引用并从我的计算机中删除库的所有实例之后,该项目的“可用引用”框仍然显示对旧库位置的引用,即使它不再存在于计算机上,而且我似乎什么也没做能够删除该引用。

我不知道这是否有任何区别,但该项目是一个 Excel 插件。

我在 2019 年遇到了这个问题,并在 2019 年 4 月收到了对同名问题的回复。当时,按照给出的建议解决了这个问题。然而这一次系统顽固地拒绝打球。

我被建议在 2019 年遵循的程序是:

  1. 删除参考
  2. 保存文件并关闭它
  3. 从您的计算机中删除 dll(在我的情况下为 .tbl)文件。不要将其保存在任何地方。
  4. 重新打开文件
  5. 检查是否还有任何参考。如果没有将 dll 复制到新文件夹,然后再次设置引用。保存并关闭文件。
  6. 重新打开以检查是否一切正常

我正打算尝试代码删除引用,但是下面的代码没有找到引用

Sub delRef()
    deleteReference ("FiskDLLlib")
End Sub
Sub deleteReference(s As String)
    Dim oFs As Object, oReferences As Object, oReference As Object
    Dim sFileName As String, sRefName As String, sRefFileName As String
    Dim toBeDeletedRef As String
    Set oReferences = Application.Workbooks("fiskAIWkBook.xlam").VBProject.References
    For Each oReference In oReferences
        sRefFileName = oReference.FullPath
        sRefName = oReference.name
        If sRefName = s Then
            toBeDeletedRef = s
            Exit For
        End If
    Next
    
    If toBeDeletedRef <> "" Then
        Debug.Print oReference.FullPath
    Else
        Debug.Print "No Reference found for " & s
    End If
End Sub

同样,Watches 面板也没有显示库。

我随后发现了一个注册表项 \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib{B22F6C9D-53E0-4D1B-9596-56AA1EA4BDBA}\1.0\0\win32 其值设置为我要删除的引用的位置。我将其更改为对要存储 dll (.tlb) 文件的新位置的引用。这至少看起来可以让我在“引用”框中创建一个新的引用,但是在单击“确定”时,我收到一条消息“加载 DLL 时出错”

标签: excelvba

解决方案


我最终解决了我的问题,方法是使用注册表清理工具(ReImage)删除注册表中对库的所有引用,然后将库复制到其新目录,然后使用 regASM 重新注册


推荐阅读