VB6 操作EXCEL文件,如何彻底退出EXCEL进程,设计两个按钮,一个用于汇总文件,一个用于退出汇总。

Private Sub Command3_Click() '数据汇总,合并多工作簿中指定工作表
On Error Resume Next
Dim myfilename As Variant, x1 As Variant, w As Workbook, wsh As Worksheet
Dim t As Workbook, ts As Worksheet, l As Integer, h As Long
Dim A As String
Dim B As String
Dim F
Dim Folder As String
Dim Filename1 As String
A = Format(DTPicker1.Value, "yyyy-MM-dd")
A = Replace(A, "/", "-")
B = Combo1.Text 'B为下拉控件Combo1的值
If B <> "" Then
Else: F = MsgBox("输入不完整, 日期和设备编号为必选项", , "错误")
Exit Sub
End If
Folder = "F:\填充率模型\" & A '定义要查找的文件夹
Filename1 = Folder & "\" & (A & "-" & B) & "-填充率模型" & ".xlsx" '定义要生成的文件
If Dir(Filename1) <> "" Then
MsgBox "文件已存在,请重新输入", vbOKOnly
Else
MsgBox "文件不存在,系统将新建" & Filename & "文件", vbOKOnly
Application.ScreenUpdating = False
Application.sesplayalerts = False
ChDir "F:\填充率模型\"
myfilename = Application.GetOpenFilename(filefilter:="excel文件(*.xls;*.xlsx),*.xls;*.xlsx,所有文件(*.*),*.*", Title:="选择要合并的excel文件", MultiSelect:=True)
If myfilename <> False Then
Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象
Set xlBook = xlApp.Workbooks.Add '新建EXCEL工件簿文件
xlBook.SaveAs Filename1 '按指定文件名存盘
xlApp.Visible = True '设置EXCEL对象可见(或不可见)
xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL启动宏
Set xlSheet = xlBook.Worksheets(1)
Set t = xlApp.Workbooks
Set ts = xlApp.Worksheets(1) '指定合并到的工作表,这里是第一张表
l = ts.UsedRange.SpecialCells(xlCellTypeLastCell).Column
For Each x1 In myfilename
If x1 <> False Then
Set w = xlApp.Workbooks.Open(x1)
Set wsh = w.Sheets(1) '指定所需合并的工作表,这里是第一张工作表
h = ts.UsedRange.SpecialCells(xlCellTypeLastCell).Row
If l = 1 And h = 1 And ts.Cells(1, 1) = "" Then
wsh.UsedRange.Copy ts.Cells(1, 1)
Else
wsh.UsedRange.Copy ts.Cells(h + 1, 1)
End If
w.Close
End If
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True

Columns("A:A").Select '进行排序
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With xlApp.ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:F150")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Set xlSheet = xlBook.Worksheets(2)
xlSheet.Delete
Set xlSheet = xlBook.Worksheets(2)
xlSheet.Delete
Set xlSheet = xlBook.Worksheets(1)
xlSheet.Name = "数据读取"
xlBook.Protect Password:="12345"
xlBook.Save
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Else: Exit Sub
End If
End If
End Sub
Private Sub Command5_Click() '汇总结束
xlBook.Close (True)
xlApp.Quit '退出EXCEL
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlapp = Nothing
'Dim cmd As Long
'cmd = Shell("taskkill /f /im " & "excel.exe", vbHide)
End Sub

建议把xlApp对象声明、建立对象放到模块的头部,也就是说要放到各个按钮过程之外,成为共公对象调用,你把它放到按钮中,变成了局部变量,因此这个按钮虽然退出 excel了,但其他按钮又重新激活了excel追问

使用另外一个按钮执行退出excel命令,也属于局部变量吗?那不是退不出去了?只能一步完成excel调用和退出excel进程?

追答

使用另外一个按钮执行退出,可以的呀,但要保证其他按钮中的代码已经执行完成,如果还在运行就会出故障(比如数据量大的时候处理会慢一些)

温馨提示:答案为网友推荐,仅供参考
相似回答