有一个按钮用于从一个应用程序导出 PDF 和 Excel 文件。导出完成后,我会将所有这些文件作为附件发送出去,但实际上,我在运行以下程序时遇到了两个问题。是否有任何其他解决方案来验证导出文件的完整性?
过程列表文件
至于程序 ListFiles,有时当我单击导出按钮时,会在“Str$ = Obj.Path”这一行弹出一个错误窗口,它指出“未找到文件”,在 VBA 本地窗口中,我看到所有变体 Obj 的属性显示为“应用程序定义的或对象定义的错误”。如果我在单击该导出按钮后让 ListFiles 程序运行几秒钟,它将顺利进行。
过程 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