Я копирую вещи из 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