无法将工作表名称设置为变量,returns "Run-time error '9': Subscript out of range"

Unable to set worksheet names to variables, returns "Run-time error '9': Subscript out of range"

我正在做一个项目来过滤一些 worksheets/columns。第一步是确定 "Iris Data" 工作 sheet 第一列中具有值的行数,并围绕它构建(因为这将再次用于新数据,删除并再次完成, ETC。)。我现在的代码不起作用,并且 returns 错误 "Run-time error '9': Subscript out of range"。因为许多示例使用通用 "Sheet1",所以我尝试 copy/pasting 将相同的数据放入名为 "Sheet1" 的新 sheet 中,并且成功了。不幸的是,根据我的主管的说法,重命名 sheets 不是一个选项。我可能可以稍微改变一下,但不会太多。

所以我的问题是,这是 'Iris Data' 中 space 的命名问题吗?其他问题?

我尝试更改为 'IrisData' 或 'Iris_Data',这也返回运行时错误 9。我还尝试设置 'Sheet1' = "Iris Data",并且 returns 运行时错误 9。

Sub Helping_Out_Alex()

Dim wb As Workbook              'identify source workbook
Dim IrisData As Worksheet       'identify Iris Data worksheet
Dim xlApp As Object             'tie workbook/worksheet into an object
Dim lastRow As Long             'identify numerical value for # of rows
Dim Sheet1 As String            'issue with spaces in name, work-around

Sheet1 = "Iris Data"            'Added this as a work around

Set xlApp = CreateObject("Excel.Application")    'set variable to object                                                         
Set wb = 
xlApp.Workbooks.Open("\uk1.group.internal\data\PERSONAL\GorowsR\My 
Documents\Equiniti\Helping_Out_Alex.xlsm")       'set varaible to workbook

Set IrisData = wb.Worksheets("Sheet1")           'set variable to first sheet

With xlApp                 'Example code                                                   
    .Visible = True        'Example code                                             
    .EnableEvents = True   'Example code                                           
End With                   'Example code                                           

With ActiveSheet
lastRow = IrisData.Cells(.Rows.Count, "A").End(xlUp).Row            'This is the variable I'm trying to define as a number so I know the range each time
    MsgBox "the value is" & lastRow
End With

End Sub

 Set IrisData = wb.Worksheets("Sheet1") 

指示 excel 指向 sheet 其名称(如屏幕底部的 excel 选项卡所示)为 Sheet1。您还可以通过代码名称(显示在 vbeditor 项目浏览器 window 中)指向 sheet,因此

Set IrisData = wb.Worksheets(Fred)

或者通过它的索引号,左边第一个 sheet 是 1:所以

 Set IrisData = wb.Worksheets(1)

您的问题似乎是您的 sheet 实际上被称为 "Iris Data" 所以你需要

   Set irisdata = wb.worksheets("Iris Data")

或(可能更简单)既然你说它是第一个 sheet,就

  Set IrisData = wb.Worksheets(1)      

您可以通过名称(字符串)或数字(整数)访问 sheet。名称中的空格不是问题,您仍然可以通过名称访问它。

所有这些都应该做:

Const sheetName = "Iris Data" 
Set IrisData = wb.Worksheets(sheetName)
- or - 
Set IrisData = wb.Worksheets("Iris Data")
- or - 
Set IrisData = wb.Worksheets(1) ' This assumes that the sheet is the 1st sheet in  Workbook.

也许你还在纠结

Sheet1 = "Iris Data" 
...
Set IrisData = wb.Worksheets("Sheet1") 

您将名为 Sheet1 的(字符串)变量设置为 sheet 名称,但稍后您不会访问具有存储在变量,而是一个名为 "Sheet1" 的 sheet(并且,由于缺少它,您会收到运行时错误 9)。只需省略引号即可(不过,我建议使用不同的变量名)。

Set IrisData = wb.Worksheets(Sheet1)