设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1761|回复: 4
打印 上一主题 下一主题

[模块/函数] 如何用代码判定是否有Excel程序开启,开启则保存并退出所有Excel程序呢

[复制链接]
跳转到指定楼层
1#
发表于 2010-2-22 16:18:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何用代码判定是否有Excel程序开启,如果有一个或多个Excel程序开启,则全部保存并退出所有Excel程序呢?呼唤高手!谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2010-2-22 16:54:14 | 只看该作者
在线等啊!高手呢?
3#
发表于 2010-2-22 20:55:10 | 只看该作者
这个很简单,下面的几行代码就能实现:
On Error Resume Next
Dim objExcel As Excel.Application

Err.Clear
Do Until Err <> 0
    Set objExcel = GetObject(, "Excel.Application")
    objExcel.ActiveWorkbook.Save
    objExcel.Quit
Loop
4#
 楼主| 发表于 2010-2-23 16:38:08 | 只看该作者
本帖最后由 xryacc2 于 2010-2-23 18:15 编辑

非常感谢红尘如烟,只是还有一个问题未能解决:
objExcel.ActiveWorkbook.Save保存的只是最后一个打开并编辑过的Excel文件,其他还有打开了的经过编辑未保存的Excel将导致死循环,除非加个代码.ActiveWorkbook.Saved =True或在循环前提前判断,这些只是完善以上代码的方法,(1)但保存两个以上打开着的且经过修改过的Excel文件的效果还是没有办法达到。(2)如果能判定某个具体的Excel文件(例如同目录的Book1.xls)是否打开,打开后就保存并关闭这一个文件这样的效果也能达到就好了。
以下是我修改过后的代码:(试用的朋友须记得在代码窗口中引用Excelx.0OLB)
On Error Resume Next
Dim objExcel As Excel.Application
err.Clear
   Set objExcel = GetObject(,"Excel.Application")
'-------以下为提前判定是否有错误发生,如果没有Excel程序开启,则GetObject错误
     If err.Number >= 1 Then
       MsgBox "没有Excel程序开启"
       Set objExcel = Nothing
       Exit Sub
    End If
    If err.Number = 0 Then
       If MsgBox("系统检测到您有其他Excel程序正在运行,系统将关闭它们!", vbOKCancel + vbExclamation, "警告") = vbCancel Then
        Set objExcel = Nothing
        Exit Sub
       End If
    End If
'----------------------------
Do While err.Number = 0
   objExcel.ActiveWorkbook.Save '只能强制保存最后一个Excel程序
 '如果关闭所有Excel(除最后一个外,其他都不自动保存)则加一句代码
ActiveWorkbook.saved=true '即不提示是否保存
   objExcel.Quit
Loop
Set objExcel = Nothing
5#
 楼主| 发表于 2010-2-25 18:17:17 | 只看该作者
此问题继续期待高手。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-18 08:47 , Processed in 0.080695 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表