Я распаковка файлов, используя пример 1 из часто цитируемой распаковки макрос Рона де Бруина нашли здесь: http://www.rondebruin.nl/win/s7/win002.htmФункция Dir() не может найти свежие распакованные файлы?
Я использовал его успешно много раз до сих пор, но сейчас я пытаюсь работать с загруженными файлами, которые дважды заархивированы. Проблема, с которой я сталкиваюсь, заключается в том, что функция Dir() во второй части нижеприведенного кода не может найти однократно распакованные файлы .zip, пока я не остановлю макрос каким-либо образом.
Что я пробовал: DoEvents и реализация концепции с 1-секундной паузой перед второй частью
распаковкиЧто Работы: Открытие макроса, делая «Бегите Cursor» на Dir () в верхней части второй части кода, а затем нажмите продолжить.
Желаемая поведение: Это макрос может пробежать с помощью одной команды вместо того, чтобы его остановить с помощью Run для курсора.
Копирование соответствующих последовательных участков кода ниже, первая часть работы и следующая часть нуждается дополнительный толчок:
'835 Unzipping and Copying Only
If String8 = "835" Then
'Rename as (Directory) (Date) (File Type) (Business Line) (file extension)
Name String1 As String3 & String9 & " " & String8 & "s " & String11 & ".zip"
'Save the complete path as one string
String5 = String3 & String9 & " " & String8 & "s " & String11 & ".zip"
'String6 is the 835s Archive
String6 = (full file path, obscured for privacy, can insert generic path if needed)
'Database Folder
String7 = (full file path, obscured for privacy, can insert generic path if needed)
'Copy from the download folder to the archive folder and the database folder
FileCopy String5, String6
FileCopy String5, String7
Kill String5
'Unzip selected archive
Set Object1 = CreateObject("Shell.Application")
String12 = (directory only path with trailing backslash)
Variant1 = String12
Variant2 = String7
Object1.Namespace(Variant1).CopyHere Object1.Namespace(Variant2).items
On Error Resume Next
Set Object2 = CreateObject("scripting.filesystemobject")
Object2.deletefolder Environ("Temp") & "\Temporary Directory*", True
On Error GoTo 0
Kill String7
Эта часть требует мне «Бегите Курсор» или функция Dir() будет не находите распакованные файлы, а второй разгрузочный файл будет пропущен. Однократно распакованные файлы заканчиваются на «.out.zip». Не спрашивайте меня, вот как я их получаю. Я попытался положить DoEvents и один-второй ждать прямо перед второй строкой ниже:
'Further unzipping
String4 = Dir(String12 & "*.out.zip")
Do While String4 <> ""
'Save the complete path of the file found
String5 = String12 & String4
'Unzip selected archive
Variant1 = String12
Variant2 = String5
Object1.Namespace(Variant1).CopyHere Object1.Namespace(Variant2).items
On Error Resume Next
Object2.deletefolder Environ("Temp") & "\Temporary Directory*", True
On Error GoTo 0
Kill String5
String4 = Dir(String12 & "*.out.zip")
Loop
GoTo AllDone
End If
Другие Примечания: Я имею DoEvents в одной строке моего кода, который происходит раньше, чем эти две части.
Я использую Excel 2010.
++ Мне нравится, когда люди действительно так хорошо объясняют свои вопросы :) Спасёт много времени! Определенно стоит upvote! –
Большое спасибо!Я думаю, что объяснение всего настолько ясно, насколько это возможно, является естественным продолжением превосходных рекомендаций по публикации SO и делает сайт таким простым в использовании. Сообщения других людей, в том числе ваши собственные ответы, сэкономили мне много времени на чтение и понимание, делая то же самое и послужили хорошими образцами для подражания. – puzzlepiece87
Awesome :) Хорошо, ты можешь что-то проверить для меня? Поместите контрольную точку перед DIR и вручную проверьте папку и посмотрите, были ли извлечены файлы. Если вы их не видите, нажмите «F5»? –