标题:判断 EXCEL 文件是否打开的代码是否需要更改
只看楼主
燕之峰
Rank: 2
等 级:论坛游民
帖 子:146
专家分:63
注 册:2014-3-21
结帖率:100%
已结贴  问题点数:10 回复次数:2 
判断 EXCEL 文件是否打开的代码是否需要更改
各位网友好,现有一EXCEL文件,想在VB中打开。在打开前,先判断是否已打开,如已打开,先手工关闭,再用程序打开。有如下代码
Dim xlapp As Object
Dim xlbook As Object
Dim xlsheet As Object

'先判断课表检测板是否打开,如已打开要手工关闭,然后再次启动程序
Set xlapp = CreateObject("Excel.Application") '判断是否打开
    Set xlbook = xlapp.Workbooks.Open(App.Path & "\实验.xls")
   xlapp.Visible = False
    xlapp.DisplayAlerts = False '取消Excel消息框
    Set xlsheet = xlbook.Worksheets("实验")   
    If xlbook.ReadOnly = True Then '这行主要判断是否已打开,判断是ture那么就是已经打开的。。
        'excel1.DisplayAlerts = False
        xlbook.Close (True) '关闭工作簿
        xlapp.Quit
        Set xlapp = Nothing '释放xlApp对象
        MsgBox "你已经打开了“实验.xls”文件" & Chr(13) & "请关闭原有的“实验.xls”文件", vbOKOnly, "错误提示"
       Exit Sub
     Else
        xlbook.Close (True) '关闭工作簿
        xlapp.Quit
        Set xlapp = Nothing '释放xlApp对象
    End If
Set xlapp = CreateObject("Excel.Application") '创建EXCEL应用类
Set xlbook = xlapp.Workbooks.Open(App.Path & "\实验.xls")
Set xlsheet = xlbook.Worksheets("实验")
xlapp.Visible = True
在判断过程中,是用程序打开了一下,如是只读,说明已打开,提示,提示后把用程序打开的关闭。代码中有xlbook.Close (True) ,这是保存后关闭。我想是打开的,应是不能保存的吧,是不是把这代码需改一下,改成不保存关闭。请问是不是如此。如是,请指导代码。
谢谢

[ 本帖最后由 燕之峰 于 2014-9-27 14:53 编辑 ]
搜索更多相关主题的帖子: Object EXCEL False Excel 
2014-09-27 14:22
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
你可以先引用 EXCEL 对象,引用成功,标记非VB打开的。
然后检索打开的 工作簿 ,如果找到了 目标,(实验.xls) ,那么就直接操作这个工作簿。

如果引用失败,那么 使用VB打开EXCEL 。然后再自己打开 工作簿。
如果检索工作簿没找到,那么自己打开。

---------------
程序退出时,如果是 VB 打开的 EXCEL,那么就关闭 EXCEL ,如果不是,就退出时不管。

保存是单独有一个命令的,如果使用命令关闭时,是不会提示是否保存(好像是没去测试)

授人于鱼,不如授人于渔
早已停用QQ了
2014-09-27 17:53
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:10 
'-------刷新工作簿列表-----------
On Error Resume Next
Dim i As Long

VB创建 = False
    '引用 已打开的 Excel 对象
Set excel1 = GetObject(, "Excel.Application")
'是否有错误
If Err.Number <> 0 Then
    Err.Clear
    'V8 ET V8
    Set excel1 = GetObject(, "ET.Application")
    '是否有错误
   
    If Err.Number <> 0 Then
        Err.Clear
        'WPS ET V9
        Set excel1 = GetObject(, "Ket.Application")
        '是否有错误
   
        If Err.Number <> 0 Then
            '错误
            Err.Clear
            Set excel1 = CreateObject("Excel.Application")      '创建
            If Err.Number <> 0 Then
                Err.Clear
                Set excel1 = CreateObject("ET.Application")
                If Err.Number <> 0 Then
                    Err.Clear
                    Set excel1 = CreateObject("Ket.Application")
                    If Err.Number <> 0 Then
                        Err.Clear
                        MsgBox "创建 EXECT对象失败"
                        End
                    Else
                        VB创建 = True
                    End If
                Else
                    VB创建 = True
                End If
            Else
                VB创建 = True
            End If
        End If
    End If
   
End If

excel1.Visible = True

    Combo1.Clear
        
    '导入所有的工作簿
    With excel1
        For i = 1 To .workbooks.Count
            Combo1.AddItem .workbooks(i).fullname                 '如果判断是否打开了指定的工作簿,到这里比较,

        Next i
    End With
   
    Label6.Caption = "就绪"

-------------
以上代码你确保程序只运行一次就是了。

退出时,检查这个变量:
VB创建
如果为 true 那么就是 程序创建的,再退掉这个对象就是了。

授人于鱼,不如授人于渔
早已停用QQ了
2014-09-30 16:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-436655-1-1.html




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

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