当我发布新的personal.xlsb或用户需要升级到最新版本时,我试图关闭所有excel工作簿。下面是我关闭所有excel工作簿的代码,但它只在运行时关闭PERSONAL.XLSB:
Public Sub CloseAll()
Dim wb As Workbook
For Each wb In Application.Workbooks()
wb.Close True ' Or False if you don't want changes saved
Next wb
Application.Quit
End Sub
这里是发布代码,即将我的personal.xlsb复制到服务器:(可能对其他人有用,因此在此处发布)
Sub publish()
Call Settings.init 'Contains excelMakroVersjon="101"
Dim hFile As Long
Dim FileContents1 As String
Dim versionNumber As String
Dim strFile1 As String
strFile1 = "Z:\Dokumentstyring\LatestVersion\CopyMacro.bat"
Kill strFile1
Kill "Z:\Dokumentstyring\LatestVersion\PERSONAL*"
versionNumber = Left(excelMakroVersjon, 1) & "." & Right(excelMakroVersjon, Len(excelMakroVersjon) - 1)
FileContents1 = "ping -n 5 127.0.0.1 > nul " & vbNewLine _
& "echo f | xcopy /f /y /z ""%APPDATA%\Microsoft\Excel\XLSTART\PERSONAL.XLSB"" ""Z:\Dokumentstyring\LatestVersion\PERSONAL_" & versionNumber & ".XLSB"" "
Open strFile1 For Binary As #1
Put #1, , FileContents1
Close #1
Shell "cmd.exe /k " & strFile1
Call CloseAll
End Sub
以下是检查是否有最新版本的代码,也需要使用closeAll方法:
Sub checkLatestVersion()
Dim temp, temp2 As Variant
Call Settings.init
temp = Dir("Z:\Dokumentstyring\LatestVersion\Personal*")
temp = Mid(temp, 8, 4)
temp2 = val(Replace(temp, ".", ""))
If temp2 > val(Settings.excelMakroVersjon) Then
Select Case MsgBox("Upgrade to latest Version: " & temp, vbYesNo)
Case vbYes
Shell "cmd.exe /k Z:\Dokumentstyring\LatestVersion\updateExcel.bat"
Call CloseAll
Case vbNo
'Do nothing.
End Select
End If
End Sub
答案 0 :(得分:2)
试试这个......(小心,以下代码也会关闭当前的excel文件!)
Dim oServ As Object
Dim cProc As Variant
Dim oProc As Object
Set oServ = GetObject("winmgmts:")
Set cProc = oServ.ExecQuery("Select * from Win32_Process")
For Each oProc In cProc
If oProc.Name = "EXCEL.EXE" Then
MsgBox "Close?"
errReturnCode = oProc.Terminate()
End If
Next