VBA 运行-时间错误9 With Sheet
VBA Run-time error 9 With Sheet
所以这里我有 VBA 代码,它是我函数的一部分,但每当我 运行 它时,我都会收到以下错误:
Run-Time error '9': Subscript out of range
实际的工作表存在。在侧面板的 vba 编辑器中,它显示为 Sheet2(Data_Sheet)。在该面板的详细信息中,它显示 (Name) 为 Sheet 11 和 Name 为 Data_Sheet。有人知道这个错误的可能来源吗?我的代码如下:
With Sheets("Data_Sheet")
'this searches just row 1
Set header_cell_1 = .Rows(1).Find(What:="One", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_2 = .Rows(1).Find(What:="Two", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_3 = .Rows(1).Find(What:="Three", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_4 = .Rows(1).Find(What:="Four", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_5 = .Rows(1).Find(What:="Five", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_6 = .Rows(1).Find(What:="Six", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_7 = .Rows(1).Find(What:="Seven", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
col_1 = header_cell_1.Column
col_2 = header_cell_2.Column
col_3 = header_cell_3.Column
col_4 = header_cell_4.Column
col_5 = header_cell_5.Column
col_6 = header_cell_6.Column
col_7 = header_cell_7.Column
End With
根据评论,宏是 运行ning 来自 PERSONAL.XSLB
工作簿,因此它试图在其中找到 Sheets("Data_sheet")
,但显然没有找到,因为它在另一个工作簿中--> Subscript out of range
.
要修复,始终 使用与您一起工作的 Object
的完整参考:
With Workbooks("myWorkbook.xlsm").Sheets("Data_sheet") '<-- explicitly saying in which workbook it must look for the sheet
End With
或者,请记住:
ThisWorkbook
引用代码 运行 来自的工作簿。在您的情况下,它将引用 PERSONAL.XLSB
;
ActiveWorkbook
引用当前活动的工作簿。使用风险很大(通常,您应该知道要定位哪个工作簿)。但在某些情况下,您可能希望代码在活动工作簿上有意 运行ning(请参阅加载项示例:加载项中的代码 运行s,但您希望加载项到使用的工作簿上的 运行)。
警告:
一个常见的错误是没有使用任何引用,就像你的情况一样:
With Sheets("Data_Sheet") '<-- of which workbook?
在这种情况下,VBA 使用默认对象 ActiveWorkbook
回答问题本身。只有当你明确地想要从ActiveWorkbook
运行时,你才应该那样做;否则,总是 引用该对象以避免与此相关的任何错误。
所以这里我有 VBA 代码,它是我函数的一部分,但每当我 运行 它时,我都会收到以下错误:
Run-Time error '9': Subscript out of range
实际的工作表存在。在侧面板的 vba 编辑器中,它显示为 Sheet2(Data_Sheet)。在该面板的详细信息中,它显示 (Name) 为 Sheet 11 和 Name 为 Data_Sheet。有人知道这个错误的可能来源吗?我的代码如下:
With Sheets("Data_Sheet")
'this searches just row 1
Set header_cell_1 = .Rows(1).Find(What:="One", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_2 = .Rows(1).Find(What:="Two", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_3 = .Rows(1).Find(What:="Three", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_4 = .Rows(1).Find(What:="Four", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_5 = .Rows(1).Find(What:="Five", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_6 = .Rows(1).Find(What:="Six", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
Set header_cell_7 = .Rows(1).Find(What:="Seven", lookat:=xlWhole, MatchCase:=False, searchformat:=False)
col_1 = header_cell_1.Column
col_2 = header_cell_2.Column
col_3 = header_cell_3.Column
col_4 = header_cell_4.Column
col_5 = header_cell_5.Column
col_6 = header_cell_6.Column
col_7 = header_cell_7.Column
End With
根据评论,宏是 运行ning 来自 PERSONAL.XSLB
工作簿,因此它试图在其中找到 Sheets("Data_sheet")
,但显然没有找到,因为它在另一个工作簿中--> Subscript out of range
.
要修复,始终 使用与您一起工作的 Object
的完整参考:
With Workbooks("myWorkbook.xlsm").Sheets("Data_sheet") '<-- explicitly saying in which workbook it must look for the sheet
End With
或者,请记住:
ThisWorkbook
引用代码 运行 来自的工作簿。在您的情况下,它将引用PERSONAL.XLSB
;ActiveWorkbook
引用当前活动的工作簿。使用风险很大(通常,您应该知道要定位哪个工作簿)。但在某些情况下,您可能希望代码在活动工作簿上有意 运行ning(请参阅加载项示例:加载项中的代码 运行s,但您希望加载项到使用的工作簿上的 运行)。
警告:
一个常见的错误是没有使用任何引用,就像你的情况一样:
With Sheets("Data_Sheet") '<-- of which workbook?
在这种情况下,VBA 使用默认对象 ActiveWorkbook
回答问题本身。只有当你明确地想要从ActiveWorkbook
运行时,你才应该那样做;否则,总是 引用该对象以避免与此相关的任何错误。