循环浏览工作簿时无法获得正确的工作表名称

我正在尝试通过检查工作表名称从多个工作簿中收集数据。 但是,当我运行我的代码来检查worksheetname(这是原始数据),我得到一个错误的结果。 代码只返回Sheet1和Sheet2。 以下是代码:

Function WorksheetRAWExists(wsName As String) As Boolean Dim ws As Worksheet Dim ret As Boolean ret = False wsName = UCase(wsName) For Each ws In ThisWorkbook.Sheets If UCase(ws.Name) = "RAW DATA" Then ret = True Exit For End If Next WorksheetRAWExists = ret End Function 

发生这种情况是因为您循环访问for-each中的“ThisWorkbook”,它总是检查工作簿中的工作表集合是否正在运行VBA代码。

如果你想循环遍历所有打开的工作簿中的所有工作表,那么你可以这样做:

 Sub test() Dim wbk As Workbook, ws As Worksheet For Each wbk In Workbooks For Each ws In wbk.Worksheets MsgBox ws.Name Next ws Next wbk End Sub 

编辑:

您也可以将工作簿名称或索引(或工作簿引用本身)传递给您的函数,并检查工作簿集合中的特定引用,以防循环遍历所有打开的工作簿。