ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何判断Excel文件是否打开

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-9-19 23:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 weiyingde 于 2016-9-20 08:18 编辑
weiyingde 发表于 2016-9-19 21:06
赵老师,你这是在已经启动了excel的前提下的情形吧?
假如情况是这样的:
操作平台:ppt的VBA


我的代码这样写,却没有任何反应,赵老师帮我看看,代码如下:
Private Declare Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long, ByVal wlange As Long, ByVal dwTimeout As Long) As Long '申明自动关闭对话框
sub 避免重复的打开优盘文件()
On Error Resume Next
Call 检测优盘
myfil = "H:\ofenused\课堂答问记分系统.xslm"
If Dir(myfil) Then
     s = "该处没有文档"
     MessageBoxTimeout 0, s, Space(5) & "温馨提示", 0, 1, 2000
     Exit Sub
  Else
     Set xlapp = GetObject(, "Excel.Application")
     If Err.Number <> 0 Then
        Set xlapp = CreateObject("Excel.Application")
        Dim wbXL As excel.Workbook
        xlapp.Workbooks.Open myfil
        xlapp.Visible = False
        xlapp.DisplayAlerts = False
        Set wbXL = xlapp.Workbooks.Activate
        arr = wbXL.Sheets("名单").Range("A1:A" & [A65536"].End(3).Row)
     Else
        For Each wb In Workbooks
           If wb.Name = myfil Then
               Set wbXL = xlapp.wb.Activate
               arr = wbXL.Sheets("名单").Range("A1:A" & [A65536"].End(3).Row)
               Exit For
            End If
        Next
      end if
    End If
xlapp.DisplayAlerts = False
Debug.Print UBound(arr)
End Sub

Sub 检测优盘()
Application.DisplayAlerts = False
    Dim s$, ilj$, ipth$, msg1$, msg2$, msg3$
    Set yy = CreateObject("sapi.spvoice")
    ipth = Split(ActivePresentation.Path, ":")(0) & ":"
    msg1 = "请插入优盘!"
    msg2 = "请将优盘符改为H:"
    msg3 = "请在H盘中运行本文档!"
    For Each f In CreateObject("Scripting.FileSystemObject").Drives
    If f.drivetype = 1 Then s = f.Path: Exit For
    Next
If s <> "" Then
    If s = "H:" Then
       If s <> ipth Then
         MessageBoxTimeout 0, msg3, Space(3) & "友情提示", 0, 1, 1000
         yy.Speak msg3
         ActivePresentation.Close
         Application.Quit
       End If
    Else
    MessageBoxTimeout 0, msg2, Space(3) & "友情提示", 0, 1, 1000
    yy.Speak msg2
    ActivePresentation.Close
    Application.Quit
    End If
  Else
  MessageBoxTimeout 0, msg1, Space(3) & "友情提示", 0, 1, 1000
  yy.Speak msg2
  ActivePresentation.Close
  Application.Quit
  End If
End Sub



TA的精华主题

TA的得分主题

发表于 2016-9-20 06:07 | 显示全部楼层
本帖最后由 weiyingde 于 2016-9-20 08:15 编辑
zhaogang1960 发表于 2014-12-30 22:36
请注意,如果已经打开的工作簿不多,可以使用该方法,否则应该使用直呼其名法(2楼第
求大虾助我,多谢了,多谢了

TA的精华主题

TA的得分主题

发表于 2016-10-17 23:18 | 显示全部楼层
weiyingde 发表于 2016-9-19 23:01
我的代码这样写,却没有任何反应,赵老师帮我看看,代码如下:
Private Declare Function MessageBoxTi ...

另存为到可移动磁盘?

TA的精华主题

TA的得分主题

发表于 2016-10-18 08:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不是的,是想知道当前打开的文档是否在是U盘上的文档

TA的精华主题

TA的得分主题

发表于 2016-10-18 08:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-12-4 15:07 | 显示全部楼层
zhaogang1960 发表于 2014-12-30 22:36
请注意,如果已经打开的工作簿不多,可以使用该方法,否则应该使用直呼其名法(2楼第二种方法)

老师 如果文件是存放局域网服务器上的 如何判断别人有没有打开这个文件在编辑(我的权限只有只读)

TA的精华主题

TA的得分主题

发表于 2019-8-7 16:43 | 显示全部楼层
zhaogang1960 发表于 2014-12-28 13:18
方法1思路不正确,历遍所有工作簿必须循环完毕后再做结论:

非常感谢!

TA的精华主题

TA的得分主题

发表于 2019-11-11 10:15 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-2-14 15:09 | 显示全部楼层
qy1219no2 发表于 2014-12-26 13:08
两种方法:
一种,遍历WorkBook集合,如果集合中存在需要打开的工作薄名称,则表示该工作薄已经打开了,否 ...

dd.jpg



  1. Sub test0214()
  2.     Dim xlApp As Excel.Application
  3.     Dim xlWk As Workbook, tmpWk As Workbook
  4.     Dim Str
  5.       
  6.         Set xlApp = New Excel.Application
  7.         Str = "D:\Book.xls"
  8.         For Each tmpWk In Workbooks ' xlApp.Application.Workbooks
  9.               If tmpWk.Name = Str Then
  10.                   
  11.               Else
  12.                   Set xlWk = Workbooks.Open(Str)  'xlApp.Application.Workbooks.Open(Str)
  13.               End If
  14.         Next tmpWk
  15.         
  16.         Str = xlWk.Name
  17.         Str = xlWk.Name
  18.         Stop
  19.         Application.Run Str & "!ll"
  20.         xlWk.Close Str
  21.         Set xlWk = Nothing
  22.         Stop
  23.    
  24. End Sub
复制代码


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 06:18 , Processed in 0.035626 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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