0

有一个按钮用于从一个应用程序导出 PDF 和 Excel 文件。导出完成后,我会将所有这些文件作为附件发送出去,但实际上,我在运行以下程序时遇到了两个问题。是否有任何其他解决方案来验证导出文件的完整性?

  1. 过程列表文件

    至于程序 ListFiles,有时当我单击导出按钮时,会在“Str$ = Obj.Path”这一行弹出一个错误窗口,它指出“未找到文件”,在 VBA 本地窗口中,我看到所有变体 Obj 的属性显示为“应用程序定义的或对象定义的错误”。如果我在单击该导出按钮后让 ListFiles 程序运行几秒钟,它将顺利进行。

  2. 过程 ReadFiles 和 AccessRight

    在导出的过程中,文件会出现在一个目标文件夹中,一开始的大小为0字节,然后在几秒钟内,它的大小会越来越大。所以通过这两个程序,我可以判断一个文件是否被另一个应用程序占用。如果所有下载的文件都没有被占用,我会将它们附加在一封电子邮件中并发送出去。但是在实际运行中,该应用程序会显示一个错误窗口,它指出“文件已被其他应用程序打开”。在我看来,我猜测文件可能被我的程序 AccessRight 中的这一行占用,'Open FilePath For Binary Lock Read Write As #1'

Sub ListFiles()
    Dim FSO As Object
    Dim FSO_Folder As Object
    Dim myPath$
    Dim Obj
    Dim Str$
    Dim k1 As Long

    myPath$ = "C:\Users\jim\Desktop\UIAutomation_VBA-master"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set FSO_Folder = FSO.GetFolder(myPath)
    For Each Obj In FSO_Folder.Files
            Str$ = Obj.Path
    Next Obj
End Sub

Sub ReadFiles()
    Dim FSO As Object
    Dim FSO_Folder As Object
    Dim myPath$
    Dim Obj
    Dim Str$
    Dim k1 As Long

    myPath$ = "C:\Users\jim\Desktop\UIAutomation_VBA-master"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set FSO_Folder = FSO.GetFolder(myPath)

    Do
        k1 = 0
        For Each Obj In FSO_Folder.Files
            k1 = k1 + AccessRight(Obj.Path)
        Next Obj
        DoEvents
    Loop Until k1 = FSO_Folder.Files.Count
End Sub

Function AccessRight(ByVal FilePath As String) As Long
    On Error GoTo The_end

    AccessRight = 0
    Open FilePath For Binary Lock Read Write As #1
    Close #1
    AccessRight = 1

The_end:
End Function
4

0 回答 0