Visual Basic检查文件是否打开|重复关闭

时间:2017-04-04 11:12:21

标签: excel vba

有没有办法检查这个(例如test.xlsm)文件是否已打开?

Dim v_datenwb As String
v_datenwb = "test.xlsm"
Dim err As String
err = " ist nicht geöffnet!"
Dim op As Integer
op = 0

Do While op <> 1
If IsFileOpen(v_datenweb) = True Then
Workbooks(v_datenwb).Activate
op = 1
Else
If vbCancel = MsgBox(v_datenwb & err, vbRetryCancel, "Error") Then
    Exit Sub
End If
err = " ist nicht geöffnet! Sind sie sich sicher dass das Dokument offen ist ?"
End If
Loop

Public Function IsFileOpen( _
ByVal FileName As String, _
Optional ByVal ViewKind As String ="{00000000-0000-0000-0000-000000000000}" _
) As Boolean

我尝试过类似的东西,但它没有用。 每当程序检查文件是否打开时,结果都是False。

我很欣赏任何提出更好解决方案的建议。

2 个答案:

答案 0 :(得分:0)

您定义了v_datenwb = "test.xlsm",但是您在v_datenweb打了If IsFileOpen(v_datenweb) = True Then

您是否尝试过this solution

您只需将c:\Book2.xls更改为所需的工作簿即可。

此代码有一个名为IsFileOpen的函数和一个名为TestFileOpened的宏来调用该函数。     Sub TestFileOpened()

    ' Test to see if the file is open.
    If IsFileOpen("c:\Book2.xls") Then
        ' Display a message stating the file in use.
        MsgBox "File already in use!"
        '
        ' Add code here to handle case where file is open by another
        ' user.
        '
    Else
        ' Display a message stating the file is not in use.
        MsgBox "File not in use!"
        ' Open the file in Excel.
        Workbooks.Open "c:\Book2.xls"
        '
        ' Add code here to handle case where file is NOT open by another
        ' user.
        '
    End If

End Sub

' This function checks to see if a file is open or not. If the file is
' already open, it returns True. If the file is not open, it returns
' False. Otherwise, a run-time error occurs because there is
' some other problem accessing the file.

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

答案 1 :(得分:0)

可以使用一个简单的逻辑来检查文件是否打开...

Function IsFileOpen(fileName As String) As Boolean
Dim wb As Workbook
On Error Resume Next
Set wb = Workbooks(fileName)
On Error GoTo 0
If Not wb Is Nothing Then IsFileOpen = True
End Function

Sub Test()
Dim fName As String
fName = "test.xlsm"
If IsFileOpen(fName) Then
    MsgBox "File is open.", vbExclamation
Else
    MsgBox "File is not open.", vbExclamation
End If
End Sub