我有一个在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
答案 0 :(得分:0)
Application.OnTime
的第二个参数是explicitly declared作为字符串,因此:
Application.OnTime Now + TimeValue("00:00:01"), Application.Workbooks.Open(FILENAME:=pth, Notify _
:=False)
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
提供在常规模块中。