vb 退出调用的excel,帮忙看下为什么不能退出,谢谢!

2024-11-24 05:44:36
推荐回答(3个)
回答1:

有问题首先看看MSDN这个师傅可以解决大部分的疑难

给你一个MSDN的实例应该是解决你的问题的
用写个一个票据打印程序适当引用了这个示例解决类似的问题

该示例使用 GetObject 函数来获取对指定的 Microsoft Excel 的工作表 (MyXL) 的引用。它使用工作表的 Application 属性来显示或关闭 Microsoft Excel 等等。DetectExcel Sub 过程通过调用两个 API 函数,来查找 Microsoft Excel。如果 Microsoft Excel 正在运行,则将其放入运行对象表(Running Object Table)中。如果 Microsoft Excel 不在运行,则第一次调用 GetObject 将导致错误。在本例中,出现该错误则把 ExcelWasNotRunning 标志设为 True。第二次调用 GetObject 是指定要打开的一个文件。如果 Microsoft Excel 不在运行,则这个第二次的调用将启动该程序,并返回一个指定文件 (mytest.xls) 所对应的工作表的引用。该文件必须位于指定的位置;否则将产生 Visual Basic 错误及自动化错误。随后的示例代码将 Microsoft Excel 及包含指定工作表的窗口设为可见。最后,如果在此前没有 Microsoft Excel 的副本在运行,代码就使用 Application 对象的 Quit 方法来关闭 Microsoft Excel。如果该应用程序原来就在运行,则不要试图关闭它。引用本身在设为 Nothing 后被释放。

'声明必要的 API 例程:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long _
ByVal wParam as Long, _
ByVal lParam As Long) As Long

Sub GetExcel()
Dim MyXL As Object '用于存放
'Microsoft Excel 引用的变量。
Dim ExcelWasNotRunning As Boolean '用于最后释放的标记。

'测试 Microsoft Excel 的副本是否在运行。
On Error Resume Next '延迟错误捕获。
'不带第一个参数调用 Getobject 函数将
'返回对该应用程序的实例的引用。
'如果该应用程序不在运行,则会产生错误。
Set MyXL = Getobject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear '如果发生错误则要清除 Err 对象。

'检测 Microsoft Excel。如果 Microsoft Excel 在运行,
'则将其加入运行对象表。
DetectExcel

'将对象变量设为对要看的文件的引用。
Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

'设置其 Application 属性,显示 Microsoft Excel。
'然后使用 MyXL 对象引用的 Windows 集合
'显示包含该文件的实际窗口。
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
'在此处对文件
'进行操作。
' ...
'如果在启动时,Microsoft Excel 的这份副本不在运行中,
'则使用 Application 属性的 Quit 方法来关闭它。
'注意,当试图退出 Microsoft Excel 时,
'标题栏会闪烁,并显示一条消息
'询问是否保存所加载的文件。
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF

Set MyXL = Nothing '释放对该应用程序
'和电子数据表的引用。
End Sub

Sub DetectExcel()
'该过程检测并登记正在运行的 Excel。
Const WM_USER = 1024
Dim hWnd As Long
'如果 Excel 在运行,则该 API 调用将返回其句柄。
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then '0 表示没有 Excel 在运行。
Exit Sub
Else
'Excel 在运行,因此可以使用 SendMessage API
'函数将其放入运行对象表。
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub

回答2:

Application.DisplayAlerts = False‘不出现提示框,就是无需确认
Application.Visible = True’文件可见
WorkBook.Close‘这步不可省 ,这步是关闭工作表
Application.Quit’这步不可少,这步是退出程序
’以下是释放变量(内存)。注意顺序:
Set Sheet = Nothing
Set WorkBook = Nothing
Set Application = Nothing
供参考。

回答3:

厉害