【问题标题】:VBA Application.Ontime error 438. Object doesn't support this property or methodVBA Application.Ontime 错误 438。对象不支持此属性或方法
【发布时间】:2019-12-04 20:41:08
【问题描述】:

我有一个在 Excel 2010 中运行良好的宏。我现在尝试使用 Excel 2016 / 365 运行此文件,但宏弹出运行时错误 438:对象不支持这个属性或方法。它基本上关闭并重新打开我正在处理的当前 Excel 文件,忽略任何要保存的消息,无论我是否是只读的。如果有人可以提供帮助,那就太好了。代码如下。提前致谢。

Sub reopen2()

Application.DisplayAlerts = False
Dim wb As Excel.Workbook
Set wb = ThisWorkbook

Dim pth As String
pth = wb.FullName

Application.OnTime Now + TimeValue("00:00:01"), Application.Workbooks.Open(FILENAME:=pth, Notify _
        :=False)
wb.Close (False)
Application.DisplayAlerts = True

End Sub

【问题讨论】:

  • 嗯。 Office 2016(但不是 365)中没有复制。这在新工作簿中是否不起作用(确保先保存)。
  • 它肯定抱怨 Application.Workbooks.Open(),过程名称必须作为字符串提供并且不能带参数。 docs.microsoft.com/en-us/office/vba/api/…
  • 这个错误出现在哪个代码行?

标签: excel vba


【解决方案1】:

Application.OnTime的第二个参数是explicitly declared作为字符串,所以这样:

Application.OnTime Now + TimeValue("00:00:01"), Application.Workbooks.Open(FILENAME:=pth, Notify _
        :=False)

is actually:

Application.OnTime Now + TimeValue("00:00:01"), Application.Workbooks.Open(FILENAME:=pth, Notify _
        :=False).DefaultPropertyOfWorkbook

工作簿没有默认属性,因此出现“对象不支持此属性或方法”错误。

您必须将代码放入方法中,并将其名称作为字符串提供给OnTime

您希望将已关闭的工作簿的完整路径传递给该方法,因此通常您必须注册 OnTime 调用 with parameters

但是,在您的情况下,您不必这样做,因为您要做的只是打开工作簿,Excel 会记住注册的宏驻留在哪个工作簿中,如果计划按时调用,它将自动重新打开工作簿只是为了调用宏,这已经是你想要的效果了。所以你的完整代码是:

Option Explicit

Sub reopen2()
  Application.OnTime Now + TimeValue("00:00:01"), "DoNothing"

  ThisWorkbook.Close False
End Sub

Public Sub DoNothing()
End Sub

只要它在常规模块中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多