Для экспорта файлов PDF и Excel из одного приложения используется одна кнопка.После завершения экспорта я буду отправлять электронные письма со всеми этими файлами в виде вложений, но в действительности я сталкиваюсь с двумя проблемами при выполнении описанных ниже процедур.Существуют ли другие решения для проверки целостности экспортируемых файлов?
Процедура ListFiles
Как и в случае процедуры ListFiles, иногда, когда я нажимаю кнопку экспорта, в этой строке появляется одно сообщение об ошибке 'Str $ = Obj.Path', в нем указано «Файл не найден», в локальном окне VBA я вижу, что все атрибуты варианта Obj отображаются как «ошибка приложения или объекта».Если я позволю процедуре ListFiles запускаться через несколько секунд после нажатия на эту кнопку экспорта, она пройдет гладко.
Процедура ReadFiles и AccessRight
В процессе экспортафайл появится в одной целевой папке с его размером в 0 байт в начале, а затем через несколько секунд его размер станет больше и больше.Таким образом, с помощью этих двух процедур я могу определить, занят ли один файл другим назначением или нет.Если все загруженные файлы не заняты, я прикреплю их в одном письме и отправлю.Но при фактическом запуске из этого приложения появится одно окно с ошибкой, в котором говорится, что «файл открыт другими приложениями».На мой взгляд, я полагаю, что файл может быть занят этой строкой в моей процедуре AccessRight: «Открыть FilePath для двоичной блокировки, прочитать запись как # 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