Excel VBA:错误91(“对象变量或未设置块变量”)

Excel VBA:错误91(“对象变量或未设置块变量”),excel,vba,Excel,Vba,我正在将Excel中的内容复制到PowerPoint中,而且大部分时间都能正常工作。除了有时在这本工作簿中出现错误(“对象变量或未设置块变量”) 下面是我的代码中发生错误的部分;为了完整起见,我只包括了MainSub,实际相关部分在subpanl中。更具体地说,调试器在Debug.Print“wb:&wbCapAnl.Name行停止,我包括该行以找到错误的根源。因此,工作簿似乎出现了一些问题,但同样,代码通常是有效的 另外,Set wbCapAnl=Workbooks.Open(文件名:=Pat

我正在将Excel中的内容复制到PowerPoint中,而且大部分时间都能正常工作。除了有时在这本工作簿中出现错误(“对象变量或未设置块变量”)

下面是我的代码中发生错误的部分;为了完整起见,我只包括了
MainSub
,实际相关部分在
subpanl
中。更具体地说,调试器在
Debug.Print“wb:&wbCapAnl.Name
行停止,我包括该行以找到错误的根源。因此,工作簿似乎出现了一些问题,但同样,代码通常是有效的

另外,
Set wbCapAnl=Workbooks.Open(文件名:=PathCapAnl,UpdateLinks:=False,只读:=True)
每次都有效。它可以打开工作簿,所以我不知道问题出在哪里。打开工作簿后,我尝试使用
DoEvents
,但没有成功。我在代码中打开的其他每一个工作簿(有很多)都可以正常工作

    Dim CapAnlExists As Boolean
    Sub MainSub()
        Dim CapAnlArray As Variant
        PathCapAnl As String

        CapAnlExists = True
        CapAnlArray = Array("C01", "C02", "25", "35", "45", "46", "49", "51", "52", "53", "54")

        If Dir("C:\CapAnl " & YearNum & " " & MonthNum & ".xlsm") = "" Then
            MsgBox "CapAnl " & YearNum & " " & MonthNum & ".xlsm couldn't be found."
            CapAnlExists = False
        Else
            PathCapAnl = "C:\CapAnl " & YearNum & " " & MonthNum & ".xlsm"
        End If

        If CapAnlExists Then
            Call SubCapAnl(CapAnlArray)
        End If
    End Sub



    Sub SubCapAnl(CapAnlArray As Variant)
        Dim wbCapAnl As Workbook
        Dim wsCapAnl As Worksheet
        Dim CapAnlSheet As Variant
        Dim lRowKA As Long
        Dim rngKA As Range

        Set wbCapAnl = Workbooks.Open(Filename:=PathCapAnl, UpdateLinks:=False, ReadOnly:=True)


        For Each CapAnlSheet In CapAnlArray
            Debug.Print "wb: " & wbCapAnl.Name

            If CapAnlSheet = "C01" Or CapAnlSheet = "35" Then
                lRowKA = wbCapAnl.Sheets(CapAnlSheet).Cells(wbCapAnl.Sheets(CapAnlSheet).Rows.Count, "B").End(xlUp).End(xlUp).End(xlUp).End(xlUp).End(xlUp).End(xlUp).Row
            Else
                lRowKA = wbCapAnl.Sheets(CapAnlSheet).Cells(wbCapAnl.Sheets(CapAnlSheet).Rows.Count, "B").End(xlUp).Row
            End If

            If CapAnlSheet = "C01" Or CapAnlSheet = "C02" Then
                Set rngKA = wbCapAnl.Sheets(CapAnlSheet).Range("B2:M" & lRowKA)
            Else
                Set rngKA = wbCapAnl.Sheets(CapAnlSheet).Range("B2:P" & lRowKA)
            End If

            rngKA.Copy
            Set mySlide = myPresentation.Slides.Add(myPresentation.Slides.Count, 12)

            DoEvents
            mySlide.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile, Link:=msoCTrue
            On Error GoTo 0
            Set myShape = mySlide.Shapes(mySlide.Shapes.Count)
            With myShape
                .Height = 432
                .Top = 45
                .Left = 30
            End With


        Application.CutCopyMode = False
        Next CapAnlSheet

        wbCapAnl.Close SaveChanges:=False
        Exit Sub

    End Sub

这看起来有点奇怪。如果在
设置wbCapAnl=Workbooks.Open之后编写
wbCapAnl.Save
,会发生什么情况(…
错误还会出现吗?我想我找到了问题所在。当您在路径目录上运行检查时,您无法将
CapAnlExists
设置为true,例如,当您创建工作簿对象时,您指定了一个空字符串,因此,该对象为空,因此您得到了错误。请尝试粘贴一个显式字符串在
文件名中
并检查您的结果。我可能是错的。此外,您不能根据上面的代码调用sub,因此不确定这是否是实际代码的准确表示。您需要将
CapAnlExists
设置为true才能调用
SubPanl()
。布尔值的默认状态为
False
。因此,可能需要进行编辑?在设置对象以验证我是否正确后,运行
测试wbCapAnl is Nothing
。@Alex如果运行
调试,您会从哪里得到错误。在
For
循环之前和设置对象之后打印
CapAnlArray
可能有问题,但需要确保测试。@Alex我已经运行了一个测试,但我使用了
Filename:=“Book2.xlsx”
而且它工作正常。因此,您的工作簿对象
wbCapAnl
以及您的设置方式有问题。对不起,恐怕我帮不了什么忙。这看起来有些奇怪。如果在
设置wbCapAnl=工作簿之后编写
wbCapAnl.Save
,会发生什么情况。打开(…
错误还会出现吗?我想我找到了问题所在。当您在路径目录上运行检查时,您无法将
CapAnlExists
设置为true,例如,当您创建工作簿对象时,您指定了一个空字符串,因此,该对象为空,因此您得到了错误。请尝试粘贴一个显式字符串在
文件名中
并检查您的结果。我可能是错的。此外,您不能根据上面的代码调用sub,因此不确定这是否是实际代码的准确表示。您需要将
CapAnlExists
设置为true才能调用
SubPanl()
。布尔值的默认状态为
False
。因此,可能需要进行编辑?在设置对象以验证我是否正确后,运行
测试wbCapAnl is Nothing
。@Alex如果运行
调试,您会从哪里得到错误。在
For
循环之前和设置对象之后打印
CapAnlArray
可能有问题,但需要确定测试结果。@Alex我已经运行了一个测试,但我使用了
Filename:=“Book2.xlsx”
并且工作正常。因此,您的工作簿对象
wbCapAnl
和您的设置方式有问题。抱歉,我无法提供更多帮助。