| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1129 人关注过本帖
标题:VB操作Excel后的问题
只看楼主 加入收藏
PJPX
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2009-7-27
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:5 
VB操作Excel后的问题
使用以下VB代码操作Excel以后,发现进程中Excel并未关闭:
    Dim xlApp     As Object     'Excel.Application
    Dim xlBook     As Object       'Excel.Workbook
    Dim xlSheet     As Object       'Excel.Worksheet
    Screen.MousePointer = vbHourglass
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets(1)
    ......
    xlApp.Visible = True
    Screen.MousePointer = vbDefault
    xlApp.Quit
    Set xlApp = Nothing
    Set xlBook = Nothing
    Set xlSheet = Nothing
代码执行后,显示Excel并提示是否保存,无论选择保存与否,当Excel关闭后,打开任务管理器发现Excel仍存在,请教各位大大,如何解决?
搜索更多相关主题的帖子: Object Excel 
2011-06-29 09:23
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:7 
Form :
Call KillProcess("EXCEL.EXE")


Module :
程序代码:
'Kill Process
Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    dwFlags As Long
    szexeFile As String * 260
End Type

Public Function KillProcess(NameProcess As String)

Const PROCESS_ALL_ACCESS = &H1F0FFF
Const TH32CS_SNAPPROCESS As Long = 2&

Dim uProcess  As PROCESSENTRY32
Dim RProcessFound As Long
Dim hSnapshot As Long
Dim SzExename As String
Dim ExitCode As Long
Dim MyProcess As Long
Dim AppKill As Boolean
Dim AppCount As Integer
Dim i As Integer
Dim WinDirEnv As String
        
       If NameProcess <> "" Then
          AppCount = 0

          uProcess.dwSize = Len(uProcess)
          hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
          RProcessFound = ProcessFirst(hSnapshot, uProcess)
  
          Do
          
            i = InStr(1, uProcess.szexeFile, Chr(0))
            SzExename = LCase$(Left$(uProcess.szexeFile, i - 1))
            WinDirEnv = Environ("Windir") + "\"
            WinDirEnv = LCase$(WinDirEnv)
        
            If Right$(SzExename, Len(NameProcess)) = LCase$(NameProcess) Then
               AppCount = AppCount + 1
               MyProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)
               AppKill = TerminateProcess(MyProcess, ExitCode)
               Call CloseHandle(MyProcess)
            End If
            RProcessFound = ProcessNext(hSnapshot, uProcess)
            
          Loop While RProcessFound
          
          Call CloseHandle(hSnapshot)
          
       End If

End Function


有缺的API声明上网找到再自己加上去~

不要選我當版主
2011-06-29 12:36
PJPX
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2009-7-27
收藏
得分:0 
回复 2楼 wube
请教楼上,你的代码是用来检测和关闭Excel的吧?那跟下面的代码作用有什么不同吗?
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 '--------------------------------------------------------------------
Private Sub Form_Load()

 
  Dim Handle     As Long           '   窗口句柄
  Handle = FindWindow("XLMAIN", vbNullString)             '   获得窗口句柄
  If Handle = 0 Then
  MsgBox "Excel没启动"
  Else
   If MsgBox("当前有活动Excel工作薄,是否将其关闭?", vbInformation + vbYesNo, "温馨提示") = vbYes Then
  Shell "taskkill /f /im excel.exe"
  Else
  End If
  End If
End Sub
2011-06-29 14:42
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
我那个是找行程~从头到尾一个一个比对找~找到就砍~

这个taskkill我没用过~从字面上看来~也是砍行程的~只是不跑循环怎砍?
看起来像是先找XLMAIN程序窗体句柄~找到后就砍Excel.exe~
感觉怪怪的~窗体句柄和EXCEL有啥关系?
在说假如行程里有3个EXCEL.EXE~是砍哪个?
而且写在Form_Load()里面更怪~
不是跑完Form_Load()才有窗体出现吗?所以FindWindow好像写在这有点.....
没用过这招不大清楚~

http://zhidao.baidu.com/question/97197442.html?fr=qrl&cid=93&index=5

不要選我當版主
2011-06-29 15:21
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:7 
taskkill /f /im excel.exe

结束所有名为 excel.exe  的进程。
是所有,不需要你再循环。

是 CMD 命令行的 一个外部命令。

授人于鱼,不如授人于渔
早已停用QQ了
2011-06-29 22:03
chk0301
Rank: 2
等 级:论坛游民
帖 子:23
专家分:57
注 册:2011-6-23
收藏
得分:7 
xlApp.Quit
    Set xlApp = Nothing
    Set xlBook = Nothing
    Set xlSheet = Nothing
改为
xlApp.save
xlApp.Workbooks.Close
xlApp.quit
Set xlApp = Nothing
2011-07-04 10:17
快速回复:VB操作Excel后的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016346 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved