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