带工作表的VBA运行时错误9

带工作表的VBA运行时错误9,vba,excel,excel-2010,Vba,Excel,Excel 2010,因此,这里我有VBA代码,它是我函数的一部分,但每当我运行它时,都会出现以下错误: Run-Time error '9': Subscript out of range 实际工作表已存在。在侧面板上的vba编辑器中,它显示为Sheet2(数据表)。在该面板的详细信息中,它将(名称)显示为第11页,将名称显示为数据表。有人知道这个错误的可能来源吗?我的代码如下: With Sheets("Data_Sheet") 'this searches just row 1

因此,这里我有VBA代码,它是我函数的一部分,但每当我运行它时,都会出现以下错误:

Run-Time error '9': Subscript out of range
实际工作表已存在。在侧面板上的vba编辑器中,它显示为Sheet2(数据表)。在该面板的详细信息中,它将(名称)显示为第11页,将名称显示为数据表。有人知道这个错误的可能来源吗?我的代码如下:

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

从注释来看,宏是从
PERSONAL.XSLB
工作簿运行的,因此它试图在其中查找
工作表(“数据表”)
,但显然找不到,因为它位于另一个工作簿中-->
下标超出范围

要修复此问题,请始终使用您使用的
对象的完整引用:

With Workbooks("myWorkbook.xlsm").Sheets("Data_sheet") '<-- explicitly saying in which workbook it must look for the sheet

End With

在这种情况下,VBA使用默认对象
ActiveWorkbook
回答问题本身。只有当您明确地想要从
ActiveWorkbook
运行时,您才应该这样离开它;否则,请始终引用对象以避免与此相关的任何错误

从注释来看,宏是从
PERSONAL.XSLB
工作簿运行的,因此它试图在其中查找
工作表(“数据表”)
,但显然找不到,因为它位于另一个工作簿中-->
下标超出范围

要修复此问题,请始终使用您使用的
对象的完整引用:

With Workbooks("myWorkbook.xlsm").Sheets("Data_sheet") '<-- explicitly saying in which workbook it must look for the sheet

End With

在这种情况下,VBA使用默认对象
ActiveWorkbook
回答问题本身。只有当您明确地想要从
ActiveWorkbook
运行时,您才应该这样离开它;否则,请始终引用对象以避免与此相关的任何错误

运行此代码时是否打开了多个工作簿?只有它所在的工作簿和自动存储宏的隐藏工作簿。请将
MsgBox thiswoolk.Path&vbNewLine&thiswoolk.Name
放在带工作表的
上方(“数据工作表”)
并验证宏是否从正确的工作簿运行?您可能需要采取一些操作进行调试(找到错误源并修复):1)使用断点并逐步执行,2)查找产生错误的行,3)等等。@Jeeped是正确的,实际上我们应该在ActiveWorkbook中看到它。但是工作表(“数据表”)应该是调试指向的地方。虽然没有明确说明,但这是唯一可以提示错误的地方。否则,他宁愿有一个对象未设置错误(如果没有完全匹配)。运行此代码时是否打开了多个工作簿?只有它所在的工作簿和自动存储宏的隐藏工作簿。请将
MsgBox this工作簿.Path&vbNewLine&this工作簿.Name
放在带工作表的
上方(“数据工作表”)
并验证宏是否从正确的工作簿运行?您可能需要采取一些操作进行调试(找到错误源并修复):1)使用断点并逐步执行,2)查找产生错误的行,3)等等。@Jeeped是正确的,实际上我们应该在ActiveWorkbook中看到它。但是工作表(“数据表”)应该是调试指向的地方。虽然没有明确说明,但这是唯一可以提示错误的地方。否则,他宁愿有一个Object not set错误(如果没有完全匹配的话)。两个工作簿都显示为ThisWorkbook。我应该在哪里找到他们的确切名字,或者我应该给他们重新命名?该文件不是私人文件。XLSB@Paradox您的工作簿有名称吗(我的意思是,您是否将其“另存为”…某物)?或者是新创建的工作簿?两个工作簿都显示为此工作簿。我应该在哪里找到他们的确切名字,或者我应该给他们重新命名?该文件不是私人文件。XLSB@Paradox您的工作簿有名称吗(我的意思是,您是否将其“另存为”…某物)?还是新创建的?