Excel 图纸名称显然不存在时,它不存在

Excel 图纸名称显然不存在时,它不存在,excel,vba,Excel,Vba,在过去的几周里,我一直在开发一个VBA、UserForm1程序,我做了很多测试,从来没有遇到过这个问题。 下面显示的代码是初始化例程的一部分。我对程序做了一些增强,比讨论中的代码更深入。现在,我在程序中无法通过这一点。我将Activate替换为Select,但这并不影响结果,即中止运行 拜托,有人能告诉我我做错了什么吗?或者,一个经过几十次测试的程序怎么会突然凭空出现故障 '=========================================================

在过去的几周里,我一直在开发一个VBA、UserForm1程序,我做了很多测试,从来没有遇到过这个问题。 下面显示的代码是初始化例程的一部分。我对程序做了一些增强,比讨论中的代码更深入。现在,我在程序中无法通过这一点。我将Activate替换为Select,但这并不影响结果,即中止运行

拜托,有人能告诉我我做错了什么吗?或者,一个经过几十次测试的程序怎么会突然凭空出现故障

    '======================================================================
    Dim WPA() As Variant             'Workbook path for Category Class
    Dim WBA() As Variant             'Workbook name for Category Class
    Dim WSA() As Variant             'Worksheet name for Category Class
    '======================================================================
    Dim WBK() As Workbook

    ..........
    Set WBK(S) = Workbooks.Open(WPA(S))
    Workbooks(WBA(S)).Worksheets(WSA(S)).Activate   'Activate Worksheet
    NWS(S) = CheckSheetExists(WSA(S))               'Check for Worksheet
    ..........

   Function CheckSheetExists(SheetName) As Boolean
   CheckSheetExists = Evaluate("ISREF('" & SheetName & "'!A1)")
   If CheckSheetExists = False Then
       MsgBox "Worksheet " & SheetName & " does not exist. Run aborted."
       End                        '<==================Run aborts
   End If
   End Function

这是一个好问题,据我所知,Storaxs的回答应该已经解决了这个问题

然而,当类似的事情发生时,我会尝试创建一个全新的工作簿,并将所有这些代码粘贴到该工作簿中,然后将所有单元格数据复制到新的工作表中

这曾经救过我一次,在这种情况下也可能对你有所帮助

我还建议不要删除您的旧工作簿,以防您没有将所有内容移植过来


如果这仍然不起作用,请让我们知道,我们将继续对此进行调查

看起来您正在使用全局变量

如果是这样的话,你应该意识到它们并不像你期望的那样永久。 有许多事情会导致全局变量重置和未定义

有关更多信息,请参阅此答案:

使用端

未处理的运行时错误

编辑代码

关闭包含VB项目的工作簿

对程序的增强,在代码中比讨论中的代码更深,是否可能导致这些事情之一发生,从而重置全局变量


如果必须使用全局变量,可以将它们安全地存储在工作表中。或者,每次尝试使用它时,您都可以检查它是否已定义,如果未定义,则重新定义它?

您需要将End替换为Exit函数,请参见工作簿路径、工作簿名称和工作表名称都可以从工作表对象访问。Parent.path、.Parent.name和.name。我看不出有任何理由在三个单独的数组中捕获它们,而一个数组或一组工作表对象就足够了。虽然这可能不是问题的根源,但它有助于简化代码。请包括。到目前为止,还不清楚这张表是否存在,真的吗?在哪些工作手册中?您确定sheetname中没有导致错误结果的前导/尾随空格吗?谢谢你的宝贵建议,不过,我可以向你保证我已经检查过了,但我很感激你的怀疑。我是VBA David的新手,那么我如何在这个论坛上证明我的断言的信心,即该工作表的存在。让我们讨论一下工作表存在的前提,什么情况会导致问题?关于您对工作簿路径、工作簿名称和工作表的评论,当时似乎是一个简单的解决方案,正如我所说,我是VBA的新手。程序中没有硬编码信息,所有文件名和过程名都保存在名为模板的控制表中。但是,现在您已经用.Parent.Path、.Parent.Name和.Name启发了我。我将在程序的第2版中对此进行调查。所以,谢谢你。谢谢你的建议,但是,所有全局变量,如果我使用的是VBA的新变量,都保存在名为Template的工作簿中的各种工作表上。初始化例程将所有路径名、工作簿名和工作表名读取到各种数组中,请参见示例代码:但这就是我的意思。数组是全局变量。它们可能在初始化例程运行和您实际使用它们之间被重置。我并不是说这是个问题,但这肯定是我首先要检查的事情之一。在代码中断之前添加一个断点,看看数组是否包含您认为应该包含的内容。谢谢,下次出错时我会检查。然而,为了给你反馈,我关闭了所有的excel工作簿,然后重新启动excel,你不知道吗,它工作得非常好。但我收到了一些非常有用的建议,我感谢社区中的每一个人的建议。