关闭VBA上的Excel

时间:2014-07-09 12:44:48

标签: excel vba excel-vba

我绝对是编程的初学者。我在VBA中写了一些宏。我想使用excel应用程序将一些参数加载到我的变量中。这个宏Excel仍然在一个进程中运行后我有问题,我不知道为什么。在我的宏中我关闭excel,但在此之后Execel仍在运行。 你能帮帮我吗?非常感谢

Global Machine_ID As Integer
Public Sub cteni_z_xls()
Dim excel As excel.Application
Dim xlBook As excel.Workbook
Dim xlSheet As excel.Sheets

Set xlBook = GetObject("D:\NEXNET\Zakázky\Kompan\VBA_07072014\PP\Nastroje.xls")
Dim AC_ID As Integer
'Dim Machine_ID As Integer
'přečtu excel
xlBook.Application.ScreenUpdating = False
Set xlBook = Workbooks.Open("D:\NEXNET\Zakázky\Kompan\VBA_07072014\PP\Nastroje.xls", True, True)


  If Tool_ID = 1 Then
    Machine_ID = xlBook.Worksheets(1).Range("B4").Value
    head = xlBook.Worksheets(1).Range("C4").Value
    ElseIf Tool_ID = 2 Then
    Machine_ID = xlBook.Worksheets(1).Range("B5").Value
    head = xlBook.Worksheets(1).Range("C5").Value
    ElseIf Tool_ID = 3 Then
    Machine_ID = xlBook.Worksheets(1).Range("B6").Value
    head = xlBook.Worksheets(1).Range("C6").Value
    ElseIf Tool_ID = 4 Then
    Machine_ID = xlBook.Worksheets(1).Range("B7").Value
    head = xlBook.Worksheets(1).Range("C7").Value
    ElseIf Tool_ID = 5 Then
    Machine_ID = xlBook.Worksheets(1).Range("B8").Value
    head = xlBook.Worksheets(1).Range("C8").Value
    ElseIf Tool_ID = 6 Then
    Machine_ID = xlBook.Worksheets(1).Range("B9").Value
    head = xlBook.Worksheets(1).Range("C9").Value
    ElseIf Tool_ID = 7 Then
    Machine_ID = xlBook.Worksheets(1).Range("B10").Value
    head = xlBook.Worksheets(1).Range("C10").Value
    ElseIf Tool_ID = 8 Then
    Machine_ID = xlBook.Worksheets(1).Range("B11").Value
    head = xlBook.Worksheets(1).Range("C11").Value
    ElseIf Tool_ID = 9 Then
    Machine_ID = xlBook.Worksheets(1).Range("B12").Value
    head = xlBook.Worksheets(1).Range("C12").Value
    ElseIf Tool_ID = 10 Then
    Machine_ID = xlBook.Worksheets(1).Range("B13").Value
    head = xlBook.Worksheets(1).Range("C13").Value
    ElseIf Tool_ID = 11 Then
    Machine_ID = xlBook.Worksheets(1).Range("B14").Value
    head = xlBook.Worksheets(1).Range("C14").Value
    ElseIf Tool_ID = 12 Then
    Machine_ID = xlBook.Worksheets(1).Range("B15").Value
    head = xlBook.Worksheets(1).Range("C15").Value
    ElseIf Tool_ID = 13 Then
    Machine_ID = xlBook.Worksheets(1).Range("B16").Value
    head = xlBook.Worksheets(1).Range("C16").Value
    ElseIf Tool_ID = 14 Then
    Machine_ID = xlBook.Worksheets(1).Range("B20").Value
    head = xlBook.Worksheets(1).Range("C20").Value
    ElseIf Tool_ID = 15 Then
    Machine_ID = xlBook.Worksheets(1).Range("B21").Value
    head = xlBook.Worksheets(1).Range("C21").Value
    ElseIf Tool_ID = 16 Then
    Machine_ID = xlBook.Worksheets(1).Range("B22").Value
    head = xlBook.Worksheets(1).Range("C22").Value
    ElseIf Tool_ID = 17 Then
    Machine_ID = xlBook.Worksheets(1).Range("B23").Value
    head = xlBook.Worksheets(1).Range("C23").Value
    ElseIf Tool_ID = 18 Then
    Machine_ID = xlBook.Worksheets(1).Range("B24").Value
    head = xlBook.Worksheets(1).Range("C24").Value
    ElseIf Tool_ID = 19 Then
    Machine_ID = xlBook.Worksheets(1).Range("B25").Value
    head = xlBook.Worksheets(1).Range("C25").Value
    ElseIf Tool_ID = 20 Then
    Machine_ID = xlBook.Worksheets(1).Range("B26").Value
    head = xlBook.Worksheets(1).Range("C26").Value
    ElseIf Tool_ID = 21 Then
    Machine_ID = xlBook.Worksheets(1).Range("B27").Value
    head = xlBook.Worksheets(1).Range("C27").Value
    ElseIf Tool_ID = 22 Then
    Machine_ID = xlBook.Worksheets(1).Range("B28").Value
    head = xlBook.Worksheets(1).Range("C28").Value
    ElseIf Tool_ID = 23 Then
    Machine_ID = xlBook.Worksheets(1).Range("B29").Value
    head = xlBook.Worksheets(1).Range("C29").Value
    ElseIf Tool_ID = 24 Then
    Machine_ID = xlBook.Worksheets(1).Range("B30").Value
    head = xlBook.Worksheets(1).Range("C30").Value
    ElseIf Tool_ID = 25 Then
    Machine_ID = xlBook.Worksheets(1).Range("B31").Value
    head = xlBook.Worksheets(1).Range("C31").Value
    ElseIf Tool_ID = 26 Then
    Machine_ID = xlBook.Worksheets(1).Range("B32").Value
    head = xlBook.Worksheets(1).Range("C32").Value
    ElseIf Tool_ID = 27 Then
    Machine_ID = xlBook.Worksheets(1).Range("B33").Value
    head = xlBook.Worksheets(1).Range("C33").Value
    ElseIf Tool_ID = 28 Then
    Machine_ID = xlBook.Worksheets(1).Range("B34").Value
    head = xlBook.Worksheets(1).Range("C34").Value
    ElseIf Tool_ID = 29 Then
    Machine_ID = xlBook.Worksheets(1).Range("B35").Value
    head = xlBook.Worksheets(1).Range("C35").Value
    ElseIf Tool_ID = 30 Then
    Machine_ID = xlBook.Worksheets(1).Range("B36").Value
    head = xlBook.Worksheets(1).Range("C36").Value
    ElseIf Tool_ID = 31 Then
    Machine_ID = xlBook.Worksheets(1).Range("B37").Value
    head = xlBook.Worksheets(1).Range("C37").Value
    ElseIf Tool_ID = 32 Then
    Machine_ID = xlBook.Worksheets(1).Range("B38").Value
    head = xlBook.Worksheets(1).Range("C38").Value
    ElseIf Tool_ID = 33 Then
    Machine_ID = xlBook.Worksheets(1).Range("B39").Value
    head = xlBook.Worksheets(1).Range("C39").Value

 End If



KillExcel
End Sub
Public Sub KillExcel()
'zabiju excel    ElseIf Tool_ID = 4 Then
'    Machine_ID = xlBook.Worksheets(1).Range("B6").Value
  On Error Resume Next
  If Not xlBook Is Nothing Then
    xlBook.Quit
'    Application.Quit
    Set xlBook = Nothing
  End If

'xlBook.Application.Quit

'close active woork book

 ActiveWorkbook.Close SaveChanges:=False
End Sub

2 个答案:

答案 0 :(得分:0)

您的xlbook变量不在KillExcel过程的范围内。你可以使用这样的东西(也稍微缩小代码):

Global Machine_ID As Integer
Public Sub cteni_z_xls()
    Dim xlapp As Excel.Application
    Dim xlBook As Excel.Workbook

    Set xlBook = GetObject("D:\NEXNET\Zakázky\Kompan\VBA_07072014\PP\Nastroje.xls")
    Dim AC_ID As Integer
    'Dim Machine_ID As Integer
    'prectu excel
    Set xlapp = xlBook.Application
    xlapp.ScreenUpdating = False
    Set xlBook = Workbooks.Open("D:\NEXNET\Zakázky\Kompan\VBA_07072014\PP\Nastroje.xls", True, True)

    With xlBook.Worksheets(1)
        Select Case tool_ID
            Case 1 To 13
                Machine_ID = .Cells(tool_ID + 3, "B").Value
                head = .Cells(tool_ID + 3, "C").Value
            Case 14 To 33
                Machine_ID = .Cells(tool_ID + 6, "B").Value
                head = .Cells(tool_ID + 6, "C").Value
        End Select
    End With

    xlBook.Close False
    xlapp.Quit

End Sub

答案 1 :(得分:0)

从您的脚本中,执行以下修改

...
KillExcel(xlBook)
End Sub
Public Sub KillExcel(w as workbook)
'zabiju excel    ElseIf Tool_ID = 4 Then
'    Machine_ID = w.Worksheets(1).Range("B6").Value
  On Error Resume Next
  If Not w Is Nothing Then
    w.Quit
'    Application.Quit
    Set w = Nothing
  End If

'w.Application.Quit

'close active woork book

 ActiveWorkbook.Close SaveChanges:=False
End Sub

从此脚本中,您的脚本应按预期运行。

干杯

帕斯卡

multiskillz