Excel VBA – 对象引用未设置为对象的实例

我正在使用一个漫长的过程,创build并填充一系列“路由”工作簿,并在此过程中填充主“摘要”工作簿。

简而言之,只要我尝试使用摘要中的相关工作表,就会立即在从路由工作簿导入数据时立即发生错误。

虽然引用整个代码将是不切实际的,但我从我认为在这里“相关”的地方复制:

' Get Route Number RNum = wshCtrl.Cells(2, 2 + i).Value ' Number for routes being processed (blank if not processed) RawRNum = wshCtrl.Cells(4, 2 + i).Value ' Raw Number ' Get Route Direction RDir = wshCtrl.Cells(9, 2 + i).Value ' Get Name of Worksheet NamewshRoute = "Route " & RawRNum & " - " & RDir ' Check if Route Worksheet exists Set wshRoute = Nothing On Error Resume Next Set wshRoute = Sheets(NamewshRoute) On Error GoTo 0 ' If Route Worksheet doesn't exist and Route being processed If wshRoute Is Nothing And RNum <> "" Then ' Create Route Worksheet ' Copy Template wshTemplate.Copy After:=wshTemplate ' Rename Copied Template Worksheets("Template (2)").Name = NamewshRoute ' Set as Route Worksheet Set wshRoute = Sheets(NamewshRoute) ' Enter Route Number and Direction wshRoute.Cells(2, 3).Value = RNum wshRoute.Cells(2, 4).Value = RDir ' If Route Worksheet doesn't exist and Route isn't being processes ElseIf wshRoute Is Nothing Then ' Do Nothing ' Else Route Worksheet already exists and Route being processed Else ' Update Progress Bar Percent = j / (NumRoutes + 0.5) - (1 / (NumRoutes + 1) * 8 / 8) RefreshStatusBar Percent, "Processing " & NamewshRoute, "Initialising Route" ' Update Date wshRoute.Range("AW9").Value = Month & Year 

该错误发生在以下两行之一上:

 wshRoute.Cells(2, 3).Value = RNum 

要么

 wshRoute.Range("AW9").Value = Month & Year 

取决于工作表是否存在。

注意:

  1. Option Explicit出现在代码的顶部。
  2. 据我可以告诉所有的variables是适当的定义和设置。
  3. 我已经使用了debugging过程,并使用“添加监视”已经确认wshRoute设置正确,RNum,Month和Year也是如此。
  4. wshRoute.Cells(2,3).Value返回正确的值,wshRoute.Range(“AW9”)。Value。
  5. 唯一不一致的地方是,当我进一步研究wshRoute的属性时,属性'OnCalculate'到'OnSheetDeactivate'都有一个值。 不知道这是否有关。

这段代码工作正常(我已经使用了大约一年),直到我在开始时添加了另一个macros。 新的macros将打开一个不同的工作簿并创build“数据”文件。 它不以任何方式与“摘要”工作簿交互。 如果我运行的代码没有额外的新macros,它再次运行良好。

任何build议,请解雇他们。 这是我的首要任务,所以我会尽快进行testing。

谢谢,卡梅隆

尝试添加这些debugging语句,看看你得到什么:

 Set wshRoute = Sheets(NamewshRoute) Debug.Print wshRoute Is Nothing Debug.Print wshRoute.Name & " is in workbook " & wshRoute.Parent.Name Debug.Print wshRoute.Cells(2, 3) Is Nothing Debug.Print "RNum is type " & TypeName(RNum) wshRoute.Cells(2, 3).Value = RNum 

经过一段时间的反复…感谢所有那些贡献。

问题是我试图修改受保护的工作表

我通过在导致错误的行之前放置Application.DisplayAlerts = False发现这一点。 发生这种情况时,将原始的“未设置为对象实例的对象引用”错误replace为“您试图更改的单元格或图表受保护,因此为只读”。 错误。

我通过确保所有的工作表在macros运行时不被保护来修复它。

在旁注中 – 我被抓出来不符合我的工作簿的床单。

再次感谢您的所有build议。