在Excel VBA中运行相同的代码两次时无法获取OLEObjects属性错误

问题描述 投票:1回答:1

我正在运行相同的代码行子多个命令按钮,用于打开嵌入在父电子表格中的已分配的Excel模板。

Private Sub M113_Click()
Dim WDObj As Object
Dim WDApp As Object
Dim str As String

str = ActiveWorkbook.Path & "\CND Scaled Template.xlsm"

Set WDObj = Sheets(2).OLEObjects("CNDS")
WDObj.Verb xlOpen

Dim i As Integer
i = Workbooks.Count

Workbooks(i).SaveCopyAs str
Workbooks(i).Close

Workbooks.Open (str)

Set WDObj = Nothing
Set WDApp = Nothing
End Sub

这是我收到错误消息“无法获取工作表类的OLEObjects属性”的行

Set WDObj = Sheets(2).OLEObjects("CNDS")

打开excel后第一次运行它不会出现任何错误,但第二次运行它是个问题。也可以通过调试模式进入VBA编辑器并按F5工作正常,整个代码执行良好。可能是什么问题?除了excel之外的Ole对象也不会发生这种情况。

excel vba excel-vba
1个回答
0
投票

这是您修改后的代码:

Private Sub M113_Click()

    Dim WDObj As Object
    Dim WDApp As Object
    Dim str As String

    With ThisWorkbook
        str = .Path & "\CND Scaled Template.xlsm"
        Set WDObj = .Worksheets(2).OLEObjects("CNDS")
        WDObj.Verb xlOpen
    End With

    Dim i As Long
    i = Workbooks.Count
    Workbooks(i).SaveCopyAs str
    Workbooks(i).Close
    Workbooks.Open str

End Sub

正如@PEH的评论中所提到的,很可能错误在于引用ThisWorkbookActiveWorkbook

我删除了Set WDObj = Nothing,因为它们是局部变量,并且在结束后无论如何都会被销毁。

Why Use Integer Instead of Long?

© www.soinside.com 2019 - 2024. All rights reserved.