2016-03-08 2 views
0

Я написал сценарий для добавления всех файлов в папку в zip-файл с использованием кода, адаптированного с сайта www.rondebruin.nl, но я продолжаю получать ошибку «Объектная переменная или с блочной переменной не задано'.VBA copy to zip file возвращает ошибку

Function ZipDir(FolderName As String, ZipName As String) As String 
'Copied from: http://www.rondebruin.nl/win/s7/win001.htm 
Dim FileNameZip ', FolderName 
Dim strDate As String, DefPath As String 
Dim oApp As Object 

'Create empty Zip File 
NewZip ZipName 

Set oApp = CreateObject("Shell.Application") 
'Copy the files to the compressed folder 
oApp.Namespace(ZipName).CopyHere oApp.Namespace(FolderName).items '<<ERROR HERE 

'Keep script waiting until Compressing is done 
On Error Resume Next 
Do Until oApp.Namespace(ZipName).items.Count = _ 
    oApp.Namespace(FolderName).items.Count 
    Application.Wait (Now + TimeValue("0:00:01")) 
Loop 
On Error GoTo 0 

MsgBox "You find the zipfile here: " & ZipName 
End Function 

Ошибки кода на oApp.Namespace(ZipName).CopyHere oApp.Namespace(FolderName).items линии. Однако, если я явно объявляю исходный и целевой файлы следующим образом: oApp.Namespace("C:\MyZip.Zip").CopyHere "C:\Temp\MyFile.pdf"

Если я меняю имя zip или имя файла сверху, то это ошибки.

Любые идеи?

+0

Вы получаете допустимые пути из ZipName и FolderName? – justkrys

+0

Да. Я даже попытался использовать непосредственное окно - '? Zipname' и'? Foldername', затем вставляя эти значения обратно в код ... Когда я вставляю фактическое значение, которое он работает, но когда я использую ZipName или FolderName, он не работает ... – GerHick

+0

Итак, откуда он получает ZipName и FolderName? Являются ли они в непосредственном окне из метода, вызывающего эту функцию, или для самой этой функции? Если вы делаете Debug.Print для каждого из них, это дает вам то, что вы ожидаете? – justkrys

ответ

0

При использовании объекта Shell.Application вы должны передать все пути и имена файлов как Варианты, а не строки.

Если вы посмотрите на код Рона, вы увидите, что он это делает.

Как он говорит на этой странице:

Примечание: Не Дим, например FileNameZip как строка в коде примеров. Это должен быть вариант, если вы измените это, код не будет работать .

+0

Спасибо, много за это! Именно там, где я ошибся. – GerHick