VBA Application.Ontime错误438。对象不支持此属性或方法

时间:2019-12-04 20:41:08

标签: excel vba

我有一个在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

1 个答案:

答案 0 :(得分:0)

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

提供在常规模块中。