VBA运行时错误91.故障设置对象变量

时间:2014-04-03 14:06:20

标签: excel vba excel-vba runtime-error

我认为答案太复杂了,我必须遗漏一些基本的东西。为了给出上下文,代码和这个宏是由一个在我开始时不再在这里工作的员工编写的。我每月都使用它多次,当我试图运行VBA脚本时,它突然给了我一个错误。

它给了我标准的Run Time Error 91 (Object variable or block variable not set)。代码具体是:

Dim DataBook As Workbook
Set DataBook = Workbooks.Open(Import_File_Path)
DataBook.Worksheets("Sheet1").Name = "Database"

    Application.DisplayAlerts = False
    Tool.Worksheets("Database").Delete      <-----highlighted error line
    Application.DisplayAlerts = True

DataBook.Worksheets("Database").Move before:=Tool.Worksheets(1)

VBA脚本正在尝试从我已生成的Excel工作表中获取原始数据,并导入文件(因此该部分位于Set行)并执行大量计算以创建更多数据和来自那里的统计数据。然而,我感觉到的问题在于我在这里发布的部分以及对象和变量。

突出显示的错误行是Tool.Worksheets("Database").Delete。当我向该行添加Watch时,值为Object Variable or With block variable not set。这让我相信某些东西没有被设定为它应该作为一个对象,但我又是一个VBA新手,我对自己的直觉感到不自信。

为了它的价值,我应该提到我在Watch的行中添加了另一个DataBook.Worksheets("Sheet1").Name = "Database"以及该州Subscript out of range的值。我认为这也可能是一个问题,但是我100%确定我导入的文件中有一个名为Sheet1的标签。

2 个答案:

答案 0 :(得分:4)

您需要一些代码来将工具建立为工作簿。类似的东西:

Dim Tool As Workbook
Set Tool = ActiveWorkbook

答案 1 :(得分:0)

您可以使用

Dim DataBook As Workbook
Set DataBook = Workbooks.Open(Import_File_Path)

DataBook.Worksheets("Sheet1").Name = "Database"

Application.DisplayAlerts = False
DataBook.Worksheets("Database").Delete      <-----Change
Application.DisplayAlerts = True

DataBook.Worksheets("Database").Move before:=Tool.Worksheets(1)