VBA 中的私有子例程正在被其他工作簿激活 -- 为什么?

A private subroutine in VBA is being activated by other workbooks -- Why?

我在 工作簿 A 中有一个私有子程序,每当我打开或关闭并保存其他程序时,它就是 运行ning不相关的工作簿。我试图了解为什么会发生这种情况,以便我可以捕获所有可能发生的潜在错误。

该子例程是一个名为 TabProg 的 ActiveX ComboBox,当值更改时应该 运行。我目前已经在检查中添加了一个检查,以查看是否正在尝试 运行 代码是 "Program Loading" sheet 来尝试并转移任何潜在的错误。请参阅下面的代码段。

Private Sub TabProg_Change()
    MsgBox "Whomp!", vbOKOnly + vbExclamation
    If ActiveSheet.Name <> "Program Loading" Then  'do nothing
    Else
       'Run desired actions on "Program Loading" sheet
    End If
End Sub

发生这种情况的任何已知原因或其他捕获方法都会有所帮助。谢谢!

编辑 1:当我在 Excel 的新实例中打开其他工作簿时,我 没有 看到这个问题发生。

编辑 2:我已修改代码以在代码尝试 运行 时包含一个消息框,现在如上所示。每次我打开或关闭并保存任何 Excel 文件(包括文件本身)时都会发生这种情况。 ActiveX ComboBox 中的下拉列表是 Workbook A 中对应 10 sheet 的名称列表。如果我删除 ComboBox 当前设置的 sheet ,错误将消失。如果我将 ComboBox 更改为不同的 sheet,错误将再次出现。

根据您在问题中所写的内容,我认为您的问题无法重现。我认为您的 Excel 文件已损坏。我有这样的经历:有一个用于试验宏的文件,其中一个宏使用 Excel 语音对象在打开该特定文件时说 "This is a test file"。该宏(与此文件中的所有其他宏一样)不是我个人工作簿的一部分,它已分配给定制文件中的 ThisWorkbook。在某个时候发生了一件有趣的事情:每次我打开任何 Excel 文件时,这个 "This is a test file" 私有子例程都会被激活。我没有找到任何解决方案,我只是删除了存储子程序的文件。这解决了问题,但我对此没有任何解释。恐怕同样的事情可能适用于您的文件,但也许其他人有更好的主意……也许它在系统注册表中???我不知道。您可以手动将元素/代码从此文件复制到新创建的文件并删除原始文件吗?