【问题标题】:Check if file is in Readonly state (If Statement) VBA检查文件是否处于只读状态(如果语句)VBA
【发布时间】:2019-01-14 05:08:58
【问题描述】:

所有,我有下面的代码,我需要检查第一个不处于只读状态的可用文件并将文件名用作更大模块的一部分。

例如,如果 Transactions1.csv 正在被其他用户使用,则检查 Transactions2 是否正在使用等。

我遇到的问题是它似乎总是在使用 Transactions3.csv 并忽略文件 1,2 和 4。(即使它们不处于只读状态)。任何帮助将非常感激。

Sub CheckIFFileisopen()

'checking multiple files

PMFTransFile = "\\Csdatg04\psproject\Robot\Project Preload\Transactions\Transactions1.csv"
Set TransworkBook = Workbooks.Open(PMFTransFile)
'Check to see if file is already open

If TransworkBook.ReadOnly Then
    ActiveWorkbook.Close
'check if 2nd file is available
PMFTransFile = "\\Csdatg04\psproject\Robot\Project Preload\Transactions\Transactions2.csv"
Set TransworkBook = Workbooks.Open(PMFTransFile)
        If TransworkBook.ReadOnly Then
        ActiveWorkbook.Close

'check if 3rd file is available
 PMFTransFile = "\\Csdatg04\psproject\Robot\Project Preload\Transactions\Transactions3.csv"
 Set TransworkBook = Workbooks.Open(PMFTransFile)

        If TransworkBook.ReadOnly Then
        ActiveWorkbook.Close

 'check if 4th file is available
 PMFTransFile = "\\Csdatg04\psproject\Robot\Project Preload\Transactions\Transactions4.csv"
 Set TransworkBook = Workbooks.Open(PMFTransFile)

     MsgBox "Cannot update Transactions, someone currently using file.  Please try again in a few minutes."
     Application.ScreenUpdating = True
     Application.Calculation = xlCalculationAutomatic
     End
     Exit Sub

   End If
   End If
   End If
 End Sub

【问题讨论】:

    标签: vba excel if-statement readonly


    【解决方案1】:

    由于您具有相同的路径和相似的文件名,我们可以使用循环来检查文件的状态。此外,您可能希望查看THIS 链接,了解如何检查文件是否打开。

    Sub Sample()
        Dim sPath As String, SFile As String
        Dim i As Long
        Dim Ret As Variant
    
        sPath = "\\Csdatg04\psproject\Robot\Project Preload\Transactions\Transactions"
    
        For i = 1 To 4
            SFile = sPath & i & ".csv"
    
            Ret = IsWorkBookOpen(SFile)
    
            If Ret = True Then
                MsgBox SFile & " is open. Will now check for next File"
            Else
                MsgBox SFile & " is Closed. We will work with this file"
                Exit For
            End If
        Next i
    End Sub
    
    Function IsWorkBookOpen(FileName As String)
        Dim ff As Long, ErrNo As Long
    
        On Error Resume Next
        ff = FreeFile()
        Open FileName For Input Lock Read As #ff
        Close ff
        ErrNo = Err
        On Error GoTo 0
    
        Select Case ErrNo
        Case 0:    IsWorkBookOpen = False
        Case 70:   IsWorkBookOpen = True
        Case Else: Error ErrNo
        End Select
    End Function
    

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 2021-05-20
      • 2020-03-02
      • 1970-01-01
      • 2020-01-11
      • 2019-12-10
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      相关资源
      最近更新 更多