EXCEL在打开WORKBOOK时是默认调用EXCEL平台,实际上已经存在了EXCELAPP,只不过是系统调用的,而你没有声明该对象,所以你不能关闭该对象;而如果你先引用了EXCELAPP对象,你就可以调用EXCELAPP对象(只是为了在你程序中方便而已)来打开WORKBOOK,你就可以用EXCELAPP关掉它。 不过你还是可以用下面方法关掉它: Public Declare Function ShellExecute Lib "shell32" _ Alias "ShellExecuteA" _ (ByVal hwnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongCall ShellExecute Me.hWnd,"close","excel.exe",0,"pathexcel *"pathexcel 是你的系统中EXCEL所在的目录
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As Long) As Long sub shutdownexcel() Dim Running As Excel.Application Dim Openning As Excel.Workbook Dim hWnd As LonghWnd = FindWindow("XLMAIN", 0) If hWnd = 0 Then '0 表示没有 Excel 在运行。 Exit Sub Else Set Running = GetObject(, "Excel.Application") For Each Openning In Running.Workbooks Openning.Saved = True Next Running.Quit End If Set Running = Nothing end sub
试了,遗憾,无效 感谢,清再帮忙想想有没有对付进程的API?
Private Sub Command1_Click() Workbooks.Open FileName:="C:\MyExcel.xls" Workbooks.Close End Sub可以用kill ("C:\MyExcel.xls")关闭呀
kill的定义是Deletes files from a disk 只删文件,不杀进程(sql server除外) 没用呀
使用API好了 Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPublic Const SW_MAXIMIZE = 3你的代码修改为: ShellExecute 0, "open", "C:\MyExcel.xls", "", "", SW_MAXIMIZE这样关闭EXCEL文件的同时,也会结束进程
我没用set object方法,我想知道的是,用上述的open方法,如何释放被引用的excel对象?(close无效) 请各位不吝指教。
包括,excelapplication,workbooks,sheet变量
如题所示,在这个工程中,所有代码就此两句,并引用了“excel9.0”,
c:\中有MyExcel.xls文件,(excel2000)因此,不存在其他任何定义的关于excel的变量(btw,workbooks没有quit属性吧)当open语句执行时,自动调用了excel进程,(excel文件在后台打开,不显示,按ctrl+alt+del显示“excel”进程存在)而close只能关闭该文件,无法将进程关闭,直到应用程序结束。
带来的问题是,该应用程序打开时,会无法手动打开其他excel文件(如果excel文件在前台打开,显示在屏幕上,就没有这个问题)各位有兴趣可以一试革命尚未成功,高手请继续帮忙理论上谈谈也行
所以 运行后发现excel对象未被关闭操作EXCEL时最好是使用变量来操作,便于释放
我也知道声明excelApp来的干脆利落,不过为何open-close方法就不行,一日不明,便心中不快,死不瞑目啊 :)继续中
不过你还是可以用下面方法关掉它:
Public Declare Function ShellExecute Lib "shell32" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String,
ByVal nShowCmd As Long) As LongCall ShellExecute Me.hWnd,"close","excel.exe",0,"pathexcel *"pathexcel 是你的系统中EXCEL所在的目录
在你的系统退出的时候,先检测是否有Excel进程,如果有关闭好了。
不过我对API了解不多,上面那一句ShellExecute, 写成Call ShellExecute(Me.hwnd, "close", "excel.exe", 0, "C:\Program Files\Microsoft Office\Office",SW-HIDE)可在SW-HIDE处,出错“变量未定义”
我查了一下书,nShowCmd参数应有SW_SHOW,SW_JIDE...选项的
为何错?请指教
你明明看到我上面的函数声明“ ByVal nShowCmd As Long”,你用字符来当然出错了。sw_hide 对应的好象是4。你把它改为4看看。
不过,还是没有解决问题,按ctrl+alt+del “excel”仍然存在还有其他方法么?节后结贴
.open实际是vba方法
ByVal lpWindowName As Long) As Long
sub shutdownexcel()
Dim Running As Excel.Application
Dim Openning As Excel.Workbook
Dim hWnd As LonghWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then '0 表示没有 Excel 在运行。
Exit Sub
Else
Set Running = GetObject(, "Excel.Application")
For Each Openning In Running.Workbooks
Openning.Saved = True
Next
Running.Quit
End If
Set Running = Nothing
end sub
感谢,清再帮忙想想有没有对付进程的API?
Workbooks.Open FileName:="C:\MyExcel.xls"
Workbooks.Close
End Sub可以用kill ("C:\MyExcel.xls")关闭呀
只删文件,不杀进程(sql server除外)
没用呀
该对象的WORKBOOK.OPEN 文件名
操作……
要退出就让这个对象QUIT
然后SET 对象=NOTHING
使用EXCEL.APPLICATION.VISIBALE=TRUE就行了
只是这个excel没有打开任何文件罢了。
EXCEL在打开WORKBOOK时是默认调用EXCEL平台,实际上已经存在了EXCELAPP,只不过是系统调用的,而你没有声明该对象,所以你不能关闭该对象;而如果你先引用了EXCELAPP对象,你就可以调用EXCELAPP对象.
0:不成功
非0:成功
实在不行的话就找出EXCEL的句柄,用CLOSEHANDLE干掉它。
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPublic Const SW_MAXIMIZE = 3你的代码修改为:
ShellExecute 0, "open", "C:\MyExcel.xls", "", "", SW_MAXIMIZE这样关闭EXCEL文件的同时,也会结束进程
能得到hWnd = FindWindow("XLMAIN", 0)的值
用CLOSEHANDLE(hwnd)也没法关闭
一小时后结贴