【问题标题】:Name conflict error pops when creating reference at runtime, but not at design time在运行时创建引用时会弹出名称冲突错误,但在设计时不会
【发布时间】:2020-09-05 14:18:44
【问题描述】:

我在运行时创建引用时遇到了这个惊人的问题。

简而言之:我在另一个插件中引用了一个插件,所有插件都是我自己创建的,并且工作正常(除了加载 Excel 时出现的一些烦人的弹出窗口)。作为解决这个烦恼的方法,我删除了现有的引用,以便稍后在运行时创建它。但是当我尝试创建引用时,它返回一个"Name conflicts with existing module, project, or object library" 错误弹出窗口,并且没有创建引用——这没有任何意义,因为如果我在设计时创建引用,它就可以完美地工作。没有重复名称的模块或项目。

现在进一步解释一下。

我为我的工作开发了四个有点复杂的 Excel 应用程序。每一个都是一个 VBA 项目,以 Excel 插件 (.xlam) 的形式分发。

此外,我还有第五个项目,其功能与其他四个相同。这第五个项目在其他项目中被引用(通过工具 -> 参考)。所以现在,我所要做的就是将它们作为引用函数之外的任何 API 调用(commonProject.Function (arg1, arg2, arg3 etc))。

不幸的是,我在弹出消息 (here) 时遇到了一些问题,解决方法似乎是在运行时引用其他项目中的第五个项目。

为了做到这一点,我卸载了其他四个插件中的三个,只剩下一个,并在其Workbook_Open 事件中使用了以下代码:

Private Sub Workbook_Open()
    Dim strNamePath As String
    Dim bolAddinIsRefered as Boolean
    Dim oRef As Variant
    
    strNamePath = "c:\etc\etc\etc\Filename.xlam"
    
    For Each oRef In ThisWorkbook.VBProject.References
        If oRef.FullPath = strNamePath Then bolAddinIsRefered = True
    Next oRef
    
    If bolAddinIsRefered = False Then ThisWorkbook.VBProject.References.AddFromFile strNamePath
    
End Sub

问题是,当我过去在设计时手动创建参考时,它工作得很好(除了我现在试图规避的烦人的弹出窗口)。但是当我尝试在运行时创建引用时,它会返回一个"Name conflicts with existing module, project, or object library" 错误弹出窗口,并且没有创建引用。

我已经验证了模块和工作表名称,没有重复的。

有人知道如何防止这个错误吗?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    似乎在为一个问题苦苦挣扎了一天半之后,当您在 StackOverflow 上提出问题时,解决方案就会突然出现在您的脑海中。

    我已经尝试过更改这两个项目的名称,甚至是内部函数或类似名称的子项。但是我没有看过文件名!

    由于我的解决方案称为 Sisyphus,所有插件的文件名都以“Sisyphus”开头--“Sisyphus Common Functions.xlam”、“Sisyphus DocMerge.xlam”等。

    问题是 VBA 正在比较文件名中的第一个单词。我删除了空格,它运行良好。现在我的文件名是“SisyphusCommonFunctions.xlam”、“SisyphusDocMerge.xlam”等,运行时的引用工作正常。

    感谢您抽出宝贵时间,我将把这个问答放在这里,因为它可能对某人有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 2014-07-09
      • 2010-09-08
      • 2013-05-22
      相关资源
      最近更新 更多