我需要保存,关闭并重新打开" ThisWorkbook"。 代码应该是这样的:
Sub reopen()
Dim wb As Excel.Workbook
Set wb = ThisWorkbook
wb.Save
wb.Close
wb.Open
End Sub
不幸的是,没有这样的命令" wb.Open",一旦我" wb.Close",代码停止:)
P.S。它应该是更大的一部分,它会给出错误" 91"如果工作簿没有保存 - 关闭并重新打开......
答案 0 :(得分:4)
Sub reopen()
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(pth)
wb.Close (True)
End Sub
答案 1 :(得分:0)
根据您的目标,我手边有两种可能的选择。
首先:保存,关闭并重新打开相同的例程:
Sub SaveCloseReOpen()
Dim strCMD As String
strCMD = "CMD /C PING 10.0.0.0 -n 1 -w 5000 >NUL & Excel.exe " & Chr(34) & ThisWorkbook.FullName & Chr(34)
ThisWorkbook.Save
Shell strCMD, vbNormalFocus
If Application.Workbooks.Count = 1 Then
Application.Quit
Else
ThisWorkbook.Close SaveChanges:=False
End If
End Sub
基本上,工作簿将自行保存,然后运行Shell CMD以ping一个非Routable IP等待5秒(如果您愿意,可以使用Timeout或其他东西)然后它将执行Excel.exe并重新打开工作簿。根据打开的工作簿数量,它将关闭Excel应用程序或仅关闭工作簿...虽然此方法将在单独的实例中打开Excel应用程序。如果你想要相同的实例,那么我会使用Application.OnTime方法。
第二:保存,关闭一个例程但重新打开工作簿停用事件:
在工作簿模块中:
Option Explicit
Private Sub Workbook_Deactivate()
If bClose_ReOpen Then
Shell "CMD /C PING 10.0.0.0 -n 1 -w 5000 >NUL & Excel " & Chr(34) & ThisWorkbook.FullName & Chr(34), vbNormalFocus
If Application.Workbooks.Count = 1 Then
Application.Quit
End If
End If
End Sub
然后在常规模块中:
Option Explicit
Public bClose_ReOpen As Boolean
Sub SaveCloseReOpen()
bClose_ReOpen = True
ThisWorkbook.Close SaveChanges:=True
End Sub
与First Routine相似;但是,此例程将在Workbook大部分关闭后执行Shell Run命令(通过公共布尔变量)...如果您有任何Before_Save或Before_Close事件,它们将首先运行,因为Workbook_Deactivate例程是在工作簿之前处理的最后一个例程实际上关闭了。
如果您愿意,可以随时将Shell CMD的vbNormalFocus更改为vbHide。