我正在尝试处理名称为变量的工作表。
我有一张名为" 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()中调用字符串变量?
非常感谢你的帮助!
亲切的问候,
答案 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