如果在Shell.Application Copyhere中使用字符串或变体,则无法写入zip文件

时间:2016-03-16 16:10:39

标签: excel vba excel-vba

我遇到了NameSpace CopyHere功能的麻烦。我正在尝试创建一个包含一堆日志的zip文件。我可以很好地创建zip文件,但是当使用NameSpace.CopyHere时,如果我使用字符串或包含字符串的变体,它将不会将文件写入zip存档。

例如,我有一个位于P:\ test2.txt的文件。

如果我使用这些行:

 objApp.Namespace(sZipArchive).CopyHere sFile
 objApp.Namespace(sZipArchive).CopyHere vLogs(i)

其中sFile = vLogs(i)=“P:\ test2.txt

文件test2.txt不会被复制到zip存档中。

但是,如果我使用这一行:

objApp.Namespace(sZipArchive).CopyHere "P:\test2.txt"

然后,该文件被复制到zip文件中。

如果我检查sFile或vLog(i)是否=“P:\ test2.txt”,我可以看到它们是相同的。

我在这里缺少的是为什么前两行不起作用,但第三行不起作用?

感谢您的时间。

完整子:

Private Sub BtnSaveToZip_Click()
Dim bEndRow, bTest As Boolean
Dim iRow, iCount As Integer
Dim sZipArchive, sDate, sFolderExists, sFile As String
Dim vLogs, vFilename As Variant
Dim objApp As Object

sDate = Date
sDate = Replace(sDate, "/", "") ' set date format to DDMMYYYY instead of DD/MM/YYYY
sZipArchive = LblLogArchive + "\" + sDate
sFolderExists = Dir(sZipArchive)
If sFolderExists = "" Then
    CreateDir (sZipArchive) ' if the subfolder with the date does not exists, create it
End If
sZipArchive = sZipArchive + "\" + wsContacts.Range("B7").Value + " Logs_" + sDate + ".zip"
'Check if file is open
If FileLocked(sZipArchive) Then
    MsgBox sZipArchive + " already open. Please close the archive."
    Exit Sub
End If

'Creating the zip file from Ron de Bruin
NewZip (sZipArchive)

'filling the zip file
Set objApp = CreateObject("Shell.Application")

bEndRow = False
iRow = gFirstData
Do While bEndRow = False
    If Not IsEmpty(wsLogs.Cells(iRow, gTestCase).Value) Then
        If Not IsEmpty(wsLogs.Cells(iRow, gLog).Value) Then
            vLogs = Split(wsLogs.Cells(iRow, gLog).Value, ";")
            For i = 0 To UBound(vLogs) - 1
                sFile = vLogs(i) ' Debug only
                If sFile = "P:\test2.txt" Then 'Debug only
                objApp.Namespace(sZipArchive).CopyHere vLogs(i) ' if I put "P:\test2.txt", it works correctly
                'Keep script waiting 5s for debug purpose
                Application.Wait (Now + TimeValue("00:00:05"))
                End If
            Next
        End If
    iRow = iRow + 1
    Else
        bEndRow = True
    End If
Loop
MsgBox "Zip successfully created"
Set objApp = Nothing
End Sub    

1 个答案:

答案 0 :(得分:1)

如果有效

import nltk 
lancaster = nltk.LancasterStemmer()

print lancaster.stem("recruitment")
print lancaster.stem("recruiter")
print lancaster.stem("recruited")

objApp.Namespace(sZipArchive).CopyHere "P:\test2.txt" sFile似乎与vLogs(i)相同,我相信它可能是一个领先或尾随空间的问题。试试这个

P:\test2.txt

objApp.Namespace(sZipArchive).CopyHere Trim(sFile)

检查objApp.Namespace(sZipArchive).CopyHere Trim(vLogs(i)) sFile是否包含有效路径的另一种方法是使用vLogs(i)

另一种调试方法是逐步执行代码,然后在立即窗口中输入

DIR

在这两种情况下你应该得到一个真实的。如果你没有,那就有你的问题:)