我绝对是编程的初学者。我在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
答案 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
从此脚本中,您的脚本应按预期运行。
干杯
帕斯卡