2016-03-08 34 views
0

我已經寫了一個腳本來使用從www.rondebruin.nl改編的代碼將文件夾中的所有文件添加到zip文件,但我不斷收到錯誤'Object variable or With block variable沒有設置'。VBA複製到zip文件返回錯誤

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對象時,應該將所有路徑和文件名作爲變體傳遞,而不是字符串。

如果你看看Ron的代碼,你會發現他是這麼做的。

正如他說,網頁上:

注意:不要例如FileNameZip代碼 例子灰暗的字符串。這必須是一個變體,如果你改變這個代碼將不會 工作。

+0

非常感謝!究竟是哪裏出錯了。 – GerHick