【问题标题】:Unable to get OLEObjects Property error when running the same code twice in Excel VBA在 Excel VBA 中两次运行相同的代码时无法获取 OLEObjects 属性错误
【发布时间】:2018-09-05 18:22:32
【问题描述】:

我在多个命令按钮上运行相同的代码行,这些按钮打开嵌入在父电子表格中的分配的 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 对象也不会发生这种情况。

【问题讨论】:

  • 您可能需要指定Sheets(2) 在哪个工作簿中。喜欢:ThisWorkbook.Sheets(2) 你也可能打算使用ThisWorkbook.Path 而不是ActiveWorkbook.Path。 • ThisWorkbook 是编写代码的工作簿,但ActiveWorkbook 是在代码运行时具有焦点(位于顶部)的工作簿。

标签: vba excel


【解决方案1】:

这是您修改后的代码:

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 在 cmets 中提到的,很可能错误在于引用 ThisWorkbookActiveWorkbook

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

Why Use Integer Instead of Long?

【讨论】:

  • 太棒了!!!这很完美。你知道嵌入的 OLE 对象有什么方法可以只读方式打开吗?
  • @KartikiJagtap - 尝试像这样传递它Workbooks.Open str, readonly:=True - docs.microsoft.com/en-us/office/vba/api/Excel.Workbooks.Open
  • 好的@Vityata。如果我理解正确,workbooks.open 将打开具有特定路径的工作簿。要打开嵌入的 OLE 对象,我们可以使用 'OLEobject.open WDObj, readonly:=True' 而不是 'WDObj.Verb xlOpen'
  • @KartikiJagtap - 不,实际上我以为你想打开str 一个。对于 OleObject 只读,请在此处查看一些信息,有一种方法可以更改只读状态并打开它 - social.msdn.microsoft.com/Forums/office/en-US/…
  • 谢谢。我想以只读方式打开 oleobject 以避免父文件中的任何更改。似乎没有办法将此属性设置为这些 ole 对象的只读,因此我将文件保存在另一个位置并打开它而不是 OLE 对象。
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2014-12-14
相关资源
最近更新 更多