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 11NameData_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运行时,你才应该那样做;否则,总是 引用该对象以避免与此相关的任何错误。