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

时间:2016-06-23 22:41:49

标签: excel vba excel-vba object

我正在使用一个漫长的过程来创建和填充一系列“路由”工作簿,并在执行此操作时填充主“摘要”工作簿。

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

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

        ' 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. 选项显式位于代码顶部。
  2. 据我所知,所有变量都已定义并设置得恰当。
  3. 我使用了调试过程并使用“添加观察”确认wshRoute设置正确,RNum,Month和Year也是如此。
  4. wshRoute.Cells(2,3).Value返回正确的值,wshRoute.Range(“AW9”)也是如此。值。
  5. 我能看到的唯一不一致是当我进一步研究wshRoute的属性时,属性'OnCalculate'到'OnSheetDeactivate'的值都是。不确定这是否相关。
  6. 此代码工作正常(我已经使用了大约一年),直到我在开始时添加了另一个宏。新宏打开一个不同的工作簿并创建“数据”文件。它不以任何方式与“摘要”工作簿交互。如果我在没有额外新宏的情况下运行代码,它会再次正常运行。

    任何建议请解雇他们。这对我来说是首要任务,因此我会及时进行测试。

    谢谢Cameron

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-1)

经过一番来回...感谢所有贡献者。

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

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

我通过确保宏运行时所有工作表都不受保护来修复它。

另一方面 - 我没有用工作簿来证明我的床单。

再次感谢您的所有建议。