【问题标题】:Excel VBA - Subscript out of range - Sheets name as a variableExcel VBA - 下标超出范围 - 工作表名称作为变量
【发布时间】:2017-08-23 16:25:28
【问题描述】:

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

我有一个名为“数据”的主工作表,我可以在其中获取现有工作表的名称列表。

我的代码如下:

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_name”确实存在,我仔细检查了。

很遗憾,我无法按其名称调用工作表,因为我有太多工作表要操作,这就是我想做一个循环的原因。

我尝试不使用“With”子句,而只是引用前面带有“ThisWorkbook.Sheets(sheet_name)”的工作表的每个对象,但也不起作用。

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

非常感谢您的帮助!

亲切的问候,

【问题讨论】:

  • 您可以做任何您想做的事 - 看起来没有与 sheet_name 的值匹配的工作表。
  • 应该是With sheet_name ... End With
  • 您的代码绝对有效提供工作表Data上的名称列表完全匹配工作表名称(它们不区分大小写)。检查名称开头或结尾的多余空格(data 和实际工作表名称)。 Data!A2:A10 中的任何空白也会导致此错误。

标签: vba excel


【解决方案1】:

@chris neilsen 在上面的 cmets 中给出了您的错误原因

您可以使用下面的代码来检查或避免出现此类错误:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    相关资源
    最近更新 更多