我正在开发一个过滤大量工作表/列的项目。第一步是在“Iris数据”工作表的第一列中识别具有值的行数,并围绕该工作表构建(因为这将再次用于新数据,删除,再次完成等)。我现在的代码不起作用,并返回错误“运行时错误'9':下标超出范围”。因为许多示例使用通用的“Sheet1”,所以我尝试将相同的数据复制/粘贴到名为“Sheet1”的新工作表中,并且它成功了。不幸的是,根据我的主管,重新命名表不是一种选择。我可能会稍微改变一下,但不会太多。
所以我的问题是,这是“Iris Data”空间的命名问题吗?还有其他问题吗?
我尝试更改为'IrisData'或'Iris_Data',这也是返回RunTime错误9.我还尝试设置'Sheet1'=“Iris Data”,这也返回RunTime错误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指向其名称(如屏幕底部的excel选项卡中所示)为Sheet1的工作表。您还可以通过其代码名称(显示在vbeditor项目资源管理器窗口中)指向工作表
Set IrisData = wb.Worksheets(Fred)
或者通过它的索引号,左边的第一张纸是1:所以
Set IrisData = wb.Worksheets(1)
您的问题似乎是您的工作表实际上被称为“Iris数据”,所以您需要
Set irisdata = wb.worksheets("Iris Data")
或者(可能更简单),因为你说它是第一张,只是
Set IrisData = wb.Worksheets(1)
您可以通过它的名称(字符串)或它的数字(整数)来访问工作表。名称中的空白不是问题,您仍然可以通过名称访问它。
所有这一切都应该做到:
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
的(字符串)变量设置为工作表名称,但稍后您不会访问具有存储在变量中的名称的工作表,而是一个名为“Sheet1”的工作表(并且,因为它是缺少,你得到一个运行时错误9)。只是省略引号应该做的伎俩(但是,我建议使用不同的变量名称)。
Set IrisData = wb.Worksheets(Sheet1)