2017-04-04 68 views
-1

有没有办法来检查这个(例如test.xlsm)文件是否打开?Visual Basic检查文件是否打开|重复关闭

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。

我希望有更好的解决方案的任何建议。

+0

我不想有一个文件路径。 当我没有路径时,你有解决方案吗? @ dot.Py – Z3RP

+1

我们无法看到您的IsFileOpen函数,实际上很重要。请张贴代码。 – vacip

+0

我认为这是我不善于编码的问题,我认为功能缺失,我认为这是功能。 我从这个网站得到:https://msdn.microsoft.com/de-de/library/aa300915%28v=vs.71%29.aspx @vacip – Z3RP

回答

0

您定义v_datenwb = "test.xlsm"但你在If IsFileOpen(v_datenweb) = True Then称为v_datenweb


您试过this solution

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

此代码具有一个名为IsFileOpen的函数和一个调用该函数的名为TestFileOpened的宏。 子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 
+0

是的,我gto错误(在德国):Argumenttyp ByRefunverträglich – Z3RP

+0

你是如何实现它并调用函数的?因为我只是在这里测试了这个代码,它工作! –

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 
相关问题