Excel VBA - 下标超出范围 - 表格名称为变量

时间:2017-03-29 23:45:54

标签: vba excel-vba excel

我正在尝试处理名称为变量的工作表。

我有一张名为" data"我去哪里抓住现有床单的名单。

我的代码如下:

Dim data as Worksheet
dim sheet_name as String
Dim i as Integer
Set data = ThisWorkbook.Sheets("Data")

For i = 2 to 10
    sheet_name = data.Range("A"&i).Value
    With ThisWorkbook.Sheets(sheet_name)
        'Operations on the worksheet
    End With
Next i

提示的错误是"运行时错误9:下标超出范围"对于特定的行:

With This Workbook.Sheets(sheet_name)

就好像对象Sheets没有理解字符串sheet_name。 Sheet" sheet_name"确实存在,我仔细检查过。

不幸的是,我无法按名称调用工作表,因为我有太多的工作表可以操作,这就是我想要循环的原因。

我尝试不使用"使用"条款,但只是引用工作表的每个对象,使用" ThisWorkbook.Sheets(sheet_name)在前面,但也不起作用。

您知道是否可以在Sheets()中调用字符串变量?

非常感谢你的帮助!

亲切的问候,

1 个答案:

答案 0 :(得分:1)

您的错误原因在上面的评论中由@chris neilsen

给出

您可以使用以下代码检查或避免出现这类错误:

Option Explicit

Sub CheckShtExists()

Dim data As Worksheet
Dim sheet_name As String

Set data = ThisWorkbook.Sheets("Data")

Dim ws As Worksheet
Dim ShtNamesArr() As String
Dim i As Long

ReDim ShtNamesArr(0 To ThisWorkbook.Worksheets.Count - 1) ' resize array to number of worksheets in This Workbook

' loop thourgh all worksheets and store their names in array
For Each ws In ThisWorkbook.Worksheets
    ShtNamesArr(i) = ws.Name
    i = i + 1
Next ws

For i = 2 To 10
    If data.Range("A" & i).Value <> "" Then ' ignore blank cells
        sheet_name = data.Range("A" & i).Value
        If Not IsError(Application.Match(sheet_name, ShtNamesArr, 0)) Then ' use Application.Match to see there is a sheet with this name
            With ThisWorkbook.Sheets(sheet_name)
                'Operations on the worksheet
            End With
        Else ' No Match
            MsgBox sheet_name & " doesn't exists in your workbook"
        End If
    End If
Next i

End Sub