VBA: ошибка 91 («Переменная объекта или переменная блока не установлена») - PullRequest
2 голосов
/ 31 мая 2019

Я копирую вещи из Excel в PowerPoint, и это работает большую часть времени.За исключением иногда я получаю сообщение об ошибке («Переменная объекта или переменная блока не установлена») в этой книге.

Ниже вы найдете часть моего кода, где происходит ошибка;Я только включил MainSub для полноты, актуальная часть в SubCapAnl.Более конкретно, отладчик останавливается на строке Debug.Print "wb: " & wbCapAnl.Name, которую я включил, чтобы добраться до корня ошибки.Так что, похоже, что-то не так с книгой, но опять же, обычно код работает.

Кроме того, Set wbCapAnl = Workbooks.Open(Filename:=PathCapAnl, UpdateLinks:=False, ReadOnly:=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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...