【发布时间】:2019-09-30 20:59:10
【问题描述】:
在过去的几周里,我一直在开发 VBA、UserForm1 程序,我进行了多次测试,从未遇到过这个问题。 下面显示的代码是初始化例程的一部分。我对程序做了一些改进,代码比讨论的代码更深入。现在,我无法通过程序中的这一点。我将“激活”替换为“选择”,但这并不影响结果,即中止运行。
请,有人可以建议我做错了什么吗?或者,一个经过数十次测试的程序怎么会突然凭空出现故障?
'======================================================================
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
【问题讨论】:
-
你需要将
End替换为Exit Function,见docs.microsoft.com/en-us/office/vba/language/reference/… -
工作簿路径、工作簿名称和工作表名称都可以从工作表对象(
.Parent.Path、.Parent.Name和.Name)访问。当单个数组或工作表对象集合就足够时,我看不出有任何理由将它们捕获在三个单独的数组中。虽然这可能不是问题的根源,但它有助于简化代码。 -
请包含minimal reproducible example。截至目前,尚不清楚工作表“显然”存在(真的吗?在哪个工作簿中?您确定工作表名称中没有导致错误结果的前导/尾随空格吗?等等)
-
感谢您的宝贵建议,但是,我可以向您保证,我已经检查过了,但我感谢您的怀疑。我是 VBA David 的新手,所以我如何在这个论坛上证明我对工作表存在的断言的信心。让我们在工作表存在的前提下工作,哪些情况会导致问题?
-
关于您对工作簿路径、工作簿名称和工作表的评论,这在当时似乎是一个简单的解决方案,因为我说我是 VBA 的新手。程序中没有任何信息是硬编码的,所有文件名和过程名都保存在名为 Template 的控制表上。但是,现在您已经用(.Parent.Path、.Parent.Name 和 .Name)启发了我。我将对程序的第 2 版进行调查。所以谢谢你。