在循环工作簿时,我无法获得正确的工作表名称

时间:2017-09-11 13:14:16

标签: excel vba excel-vba

我正在尝试通过检查工作表名称来从多个工作簿中收集数据。 但是,当我运行我的代码来检查工作表名称(这是原始数据)时,我得到一个错误的结果。代码只返回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

1 个答案:

答案 0 :(得分:2)

这是因为您在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

编辑:

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