保存,关闭并重新打开" ThisWorkbook"

时间:2014-03-13 13:04:14

标签: excel vba excel-vba

我需要保存,关闭并重新打开" 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"如果工作簿没有保存 - 关闭并重新打开......

2 个答案:

答案 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。