关闭所有excel工作簿(excel的几个实例可能是打开的)

时间:2016-03-01 10:15:58

标签: excel vba excel-vba

当我发布新的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

1 个答案:

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