当前位置:编程学习 > VB >>

怎样判断一个Excel文件是否在被其它的人使用?

你好, 我在用Access的代码里自动导入Excel文件时, 提示有人已经以独占方式打开了.不让我导入数据,请问有没有方判断一个excel文件是否被另一个用户在使用。 --------------------编程问答-------------------- 你以独占模式打开不就 知道了么? --------------------编程问答-------------------- 我怎么用程序来判断呢?我只会VBA,用getobject打开那个文件,总是会把文件打开,得不到一个值来确定其是否正在被另一用户使用.

请问有没有懂VBA的高手指点一下. --------------------编程问答--------------------

Private Function ExcelOpened(Optional strFileName As String) As Boolean
    Dim MyXL As Object, strMessage As String
    On Error Resume Next
    Set MyXL = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        Err.Clear
        ExcelOpened = False
    Else
        If MyXL.Workbooks(1).FullName = "" Then
            strMessage = "程序检测到你已经打开了一个Excel窗口,但没有打开任何文件!" & vbCrLf & vbCrLf
            strMessage = strMessage & "是否将它关闭?"
            If MsgBox(strMessage, vbYesNo + vbInformation, "询问") = vbYes Then
                MyXL.Quit
                ExcelOpened = False
            Else
                MsgBox "因为已有一个Excel窗口打开,程序无法继续工作!", vbExclamation, "出错信息"
                ExcelOpened = True
            End If
        ElseIf MyXL.Workbooks(1).FullName = strFileName And strFileName <> "" Then
            strMessage = "需要导出数据的工作薄已被Excel打开,是否需要保存并退出?"
            If MsgBox(strMessage, vbYesNo + vbInformation, "询问") = vbYes Then
                MyXL.Workbooks(1).Save
                MyXL.Workbooks(1).Close
                MyXL.Quit
                ExcelOpened = False
            Else
                strMessage = "程序无法继续执行操作,请先关闭你正在操作的工作薄!"
                MsgBox strMessage, vbExclamation, "出错信息"
                ExcelOpened = True
            End If
        Else
            strMessage = "程序检测到你已经打开了一个Excel窗口,并且已经打开了一个(或多个)文档!" & vbCrLf & vbCrLf
            strMessage = strMessage & "你需要将它关闭才能继续工作!是否现在将它关闭?"
            If MsgBox(strMessage, vbYesNo + vbInformation, "询问") = vbYes Then
                MyXL.Workbooks(1).Save
                MyXL.Workbooks(1).Close
                MyXL.Quit
                ExcelOpened = False
            Else
                MsgBox "因为已有一个Excel窗口打开并且存在一个文档,程序无法继续工作!", vbExclamation, "出错信息"
                ExcelOpened = True
            End If
        End If
    End If
    Set MyXL = Nothing
End Function


参考一下~ --------------------编程问答-------------------- 谢谢!你的代码可以,但是不是回答我提的那个问题,我想检查的是一个excel是否被其他用户使用。比如,在局域网里, 有可能其他用户正在使用此文件,那么我去读数据的时候就不准确!我用过Getobject,他总是会把我的目标文件打开,影响我导入此文件到Access当中。


不过还是很谢谢你的代码,对我写其他的东东很有帮助。:)
--------------------编程问答-------------------- on error goto err1
open "...xls" for output as #1
close #1
exit sub
err1:
debug.print "被其他用户使用" --------------------编程问答-------------------- 我在Microsoft的网站找到了一个现成的函数,很有用。 isfileopen

Function IsFileOpen(filename As String)
    Dim filenum As Integer, errnum As Integer

    On Error Resume Next   ' Turn error checking off.
    filenum = FreeFile()   ' Get a free file number.
    ' Attempt to open the file and lock it.
    Open filename For Input Lock Read As #filenum
    Close filenum          ' Close the file.
    errnum = Err           ' Save the error number that occurred.
    On Error GoTo 0        ' Turn error checking back on.

    ' Check to see which error occurred.
    Select Case errnum

        ' No error occurred.
        ' File is NOT already open by another user.
        Case 0
         IsFileOpen = False

        ' Error number for "Permission Denied."
        ' File is already opened by another user.
        Case 70
            IsFileOpen = True

        ' Another error occurred.
        Case Else
            Error errnum
    End Select

End Function
--------------------编程问答-------------------- 马克
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,