ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7345|回复: 10

[求助] office2010 中如何判断指定的Excel文件已打开

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-3-1 17:03 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
工作环境:win10+Office 2010
在利用open代码打开指定文件前想判断指定的excel文件是否已打开,如果指定excel文件已被手工打开了,再利用open代码执行后会出现两个excel文件,其中open代码打开的是“XXXX.xls(只读)" 。所以为了防止指定的Excel被手工打开,所以需先判断指定文件是否被打开。按之前的帖子试了好多方法都实现不了。
方法一:For Each wb In Application.Workbooks,多个.xls 文件运行后仅循环一次。
方法二:    On Error Resume Next
    Set MyXL = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then ExcelWasNotRunning = True
Excel文件已打开,但err.number总=0

总之是没有办法判断出,求各位帮忙。先谢谢了

TA的精华主题

TA的得分主题

发表于 2016-3-1 20:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub b()
  2. '判断 A.xls 文件是否打开
  3. Dim x%
  4. For x = 1 To Windows.Count
  5.     If Windows(x).Caption = "A.xls" Then
  6.         MsgBox "A文件打开了"
  7.         Exit Sub
  8.     End If
  9. Next
  10. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-3-1 20:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
>>>>>>>>>>>>>>>

03A 判断文件是否打开.rar

13.03 KB, 下载次数: 40

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-3-2 14:47 | 显示全部楼层
本帖最后由 speedlin0625 于 2016-3-2 15:18 编辑

试了,好像不行。
Windows.Count=1,实际打开了两个文件,一个是“03A.xlsm",另一个是”a.xls"。d:\A.jpg
a.jpg

TA的精华主题

TA的得分主题

发表于 2016-3-2 14:55 | 显示全部楼层
请参考:
Sub 方法1()
    Dim wb As Workbook
    For Each wb In Workbooks
         If wb.Name = "A.xls" Then
            MsgBox "A.xls已经打开。"
            Exit Sub
         End If
    Next
    MsgBox "A.xls没有打开。"
End Sub

Sub 方法2()
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks("A.xls")
    If Not wb Is Nothing Then
        MsgBox "A.xls已经打开。"
    Else
        MsgBox "A.xls没有打开。"
    End If
End Sub


如果打开的文件很多,请使用第二种方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-3-2 15:25 | 显示全部楼层
本帖最后由 speedlin0625 于 2016-3-2 15:31 编辑
zhaogang1960 发表于 2016-3-2 14:55
请参考:
Sub 方法1()
    Dim wb As Workbook

方法一之前就试过了,实现不了。
方法二试了,也不行,直接跳到else了。
我的运行环境是:win10+Office professional plus 2010,不知是否与此运行环境有关。

方法二

方法二

方法一

方法一

TA的精华主题

TA的得分主题

发表于 2016-3-2 15:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-3-2 15:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
speedlin0625 发表于 2016-3-2 15:25
方法一之前就试过了,实现不了。
方法二试了,也不行,直接跳到else了。
我的运行环境是:win10+Office ...

你说你试了不行,又不上你的源代码。也没有附件。就光嘴说不行。如何帮你

TA的精华主题

TA的得分主题

发表于 2016-3-2 15:30 | 显示全部楼层
speedlin0625 发表于 2016-3-2 15:25
方法一之前就试过了,实现不了。
方法二试了,也不行,直接跳到else了。
我的运行环境是:win10+Office ...

方法1不可能出问题,顶多用时长些
方法2使用了错误处理语句On Error Resume Next,即使有错误也不可能报错
估计是你的电脑出问题了,请换一台试试看

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-3-2 15:52 | 显示全部楼层
本帖最后由 speedlin0625 于 2016-3-2 16:27 编辑
zhaogang1960 发表于 2016-3-2 15:30
方法1不可能出问题,顶多用时长些
方法2使用了错误处理语句On Error Resume Next,即使有错误也不可能报 ...

换了台电脑就可以了,但换的电脑是office2007。不知道是否是2007与2010有区别。我测试了一下,发现2007怎么打开后都如图1所示,所有的文件都会出现在一个工程中。但2010中如果手工在资源管理器中分别打开两个文件,两个文件分别出现在不同的工程中。如图2所示。所以以上的方法都不行。在2010中如果先打开03A.xlsm然后用菜单栏的打开命令再打开a.xls与2007是一样的。上述代码都可以实现。在实际应用中可能会出现用资源管理器分别打开两个文件。此类问题如何能解决判断文件已打开。
1.jpg
2.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-11 03:57 , Processed in 0.026232 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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