无法将工作表名称设置为变量,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)
我正在做一个项目来过滤一些 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)