• بررسی باز بود فایل توسط تابع IsFileOpen در اکسل

    این پست نحوه تست باز بودن فایل را توضیح می دهد.

    اگر پروژه شما با فایل‌هایی غیر از فایل‌های اکسل کار می‌کند، قبل از اینکه بخواهید آن را بخوانید یا روی آن بنویسید، باید آزمایش کنید که آیا یک فایل قبلاً توسط فرآیند دیگری باز است یا خیر. این صفحه تابعی به نام IsFileOpen را توصیف می کند که اگر فایل مشخص شده باز باشد مقدار True را برمی گرداند و اگر فایل مشخص شده باز نباشد، False را برمی گرداند. کد به سادگی با تلاش برای باز کردن فایل برای دسترسی انحصاری کار می کند. اگر فایل با فرآیند دیگری باز شود، تلاش برای باز کردن آن با شکست مواجه خواهد شد. اگر فایل مورد استفاده قرار نگیرد، تلاش برای باز کردن آن با موفقیت انجام می شود. پس از باز شدن، فایل بلافاصله بدون ذخیره بسته می شود.

    پارامتر FileName فایل مورد آزمایش را نامگذاری می کند. پارامتر ResultOnBadFile، در صورت وجود، مشخص می‌کند که اگر FileName وجود نداشته باشد یا نام فایل از نظر نحوی نامعتبر باشد، چه مقداری را برگرداند. در صورت وجود، این مقدار برگردانده خواهد شد. اگر این پارامتر حذف شود و FileName وجود نداشته باشد یا نامعتبر باشد، نتیجه False است.

    Option Explicit
    Option Compare Text
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' modIsFileOpen
    ' By Chip Pearson, www.cpearson.com , chip@cpearson.com
    ' www.cpearson.com/Excel/IsFileOpen.aspx
    ' This module contains the IsFileOpen procedure whict tests whether
    ' a file is open.
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    Public Function IsFileOpen(FileName As String, _
        Optional ResultOnBadFile As Variant) As Variant
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' IsFileOpen
    ' This function determines whether a the file named by FileName is
    ' open by another process. The fuction returns True if the file is open
    ' or False if the file is not open. If the file named by FileName does
    ' not exist or if FileName is not a valid file name, the result returned
    ' if equal to the value of ResultOnBadFile if that parameter is provided.xd
    ' If ResultOnBadFile is not passed in, and FileName does not exist or
    ' is an invalid file name, the result is False.
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    
    Dim FileNum As Integer
    Dim ErrNum As Integer
    Dim V As Variant
    
    On Error Resume Next
    
    ''''''''''''''''''''''''''''''''''''''''''''
    ' If we were passed in an empty string,
    ' there is no file to test so return FALSE.
    '''''''''''''''''''''''''''''''''''''''''''' 
    If Trim(FileName) = vbNullString Then
        If IsMissing(ResultOnBadFile) = True Then
            IsFileOpen = False
        Else
            IsFileOpen = ResultOnBadFile
        End If
        Exit Function
    End If
    
    ''''''''''''''''''''''''''''''''''''''''''''
    ' if the file doesn't exist, it isn't open
    ' so get out now
    '''''''''''''''''''''''''''''''''''''''''''' 
    V = Dir(FileName, vbNormal)
    If IsError(V) = True Then
        ' syntactically bad file name
        If IsMissing(ResultOnBadFile) = True Then
            IsFileOpen = False
        Else
            IsFileOpen = ResultOnBadFile
        End If
        Exit Function
    ElseIf V = vbNullString Then
        ' file doesn't exist.
        If IsMissing(ResultOnBadFile) = True Then
            IsFileOpen = False
        Else
            IsFileOpen = ResultOnBadFile
        End If
        Exit Function
    End If
    
    FileNum = FreeFile()
    '''''''''''''''''''''''''''''''''''''''
    ' Attempt to open the file and lock it.
    ''''''''''''''''''''''''''''''''''''''' 
    Err.Clear
    Open FileName For Input Lock Read As #FileNum
    ErrNum = Err.Number
    ''''''''''''''''''''
    ' Close the file.
    '''''''''''''''''''' 
    Close FileNum
    On Error GoTo 0
    
    ''''''''''''''''''''''''''''''''''''''
    ' Check to see which error occurred.
    '''''''''''''''''''''''''''''''''''''' 
    Select Case ErrNum
        Case 0
            ''''''''''''''''''''''''''''''''''''''''''''
            ' No error occurred.
            ' File is NOT already open by another user.
            '''''''''''''''''''''''''''''''''''''''''''' 
            IsFileOpen = False
        Case 70
            ''''''''''''''''''''''''''''''''''''''''''''
            ' Error number for "Permission Denied."
            ' File is already opened by another user.
            '''''''''''''''''''''''''''''''''''''''''''' 
            IsFileOpen = True
        Case Else
            ''''''''''''''''''''''''''''''''''''''''''''
            ' Another error occurred. Assume open.
            '''''''''''''''''''''''''''''''''''''''''''' 
            IsFileOpen = True
    End Select
    
    End Function

     

     
     

     

     

    نظرات ارسال شده ارسال نظر جدید
    برای تبادل نظر، می بایست در سایت وارد شوید

    ورود به سایت
تماس سبد خرید بالا