无法将工作表名称设置为变量,返回“运行时错误'9':下标超出范围”

问题描述 投票:0回答:2

我正在开发一个过滤大量工作表/列的项目。第一步是在“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
excel vba worksheet-function
2个回答
3
投票

这条线

 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)      

2
投票

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

所有这一切都应该做到:

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) 
© www.soinside.com 2019 - 2024. All rights reserved.