2014-03-13 48 views
0

我需要保存,關閉並重新打開「ThisWorkbook」。 代碼應該是這樣的:VBA - 保存,關閉並重新打開「ThisWorkbook」

Sub reopen() 

Dim wb As Excel.Workbook 
Set wb = ThisWorkbook 

wb.Save 
wb.Close 
wb.Open 

End Sub 

不幸的是,有沒有這樣的命令「wb.Open」,有一次我「wb.Close」,代碼將停止:)

附:我需要這樣的代碼,因爲它應該是一個更大的,它提供了一個錯誤「91」,如果不保存工作簿,關閉並重新打開的一部分...

+0

實際上,由於'wb = ThisWorkbook',當您關閉它時,代碼執行總是會中斷(因爲您關閉了從中運行代碼的工作簿)。 '我需要這樣一個代碼,因爲它應該是一個更大的代碼的一部分,如果工作簿沒有保存 - 關閉並重新打開,會給出錯誤「91」... - 我建議你修改你的代碼邏輯。如果你顯示你的代碼,也許我可以幫你 –

+0

我會這樣做,如果我知道「當前」邏輯有什麼問題。有一些事情發生,當wb關閉然後重新打開時,如果wb只被保存就不會發生......這是某種「更新」或「重新啓動」,但我不知道如何模擬它用代碼。 – Trenera

+0

好的,請顯示您的完整代碼和行,你會得到一個錯誤。我會嘗試修改它 –

回答

2
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 
+0

@ooo;這樣可行! – Trenera

+0

此代碼執行save-closing-reopening的工作,但其他代碼仍然出現錯誤。 FML – Trenera

+0

如果在兩臺計算機中打開一個excel文件,例如在網絡中的共享文件夾中,這仍然可行嗎? –

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通不可路由的IP等待5秒(可以使用超時或者你喜歡的其他東西),那麼它將執行Excel.exe並重新打開工作簿。根據打開多少個工作簿,它將關閉Excel應用程序或只是工作簿...雖然此方法將在單獨的實例中打開Excel應用程序。如果你想要相同的實例,那麼我會使用Application.OnTime方法。

二:保存,從一個常規的接近,但通過工作簿停用事件重新打開:

工作簿中的模塊:

Option Explicit 
Public bClose_ReOpen As Boolean 

Sub SaveCloseReOpen() 
    bClose_ReOpen = True 
    ThisWorkbook.Close SaveChanges:=True 
End Sub 

類似:

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 
在常規模塊

然後到第一個例程;然而,該例程將在工作簿大部分關閉後執行Shell運行命令(通過公共布爾變量)...如果您有任何Before_Save或Before_Close事件,它們將首先運行,因爲Workbook_Deactivate Routine是在工作簿之前處理的最後一個實際上關閉了。

如果您願意,您隨時都可以將Shell CMD的vbNormalFocus更改爲vbHide。

相關問題