Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Kill命令删除错误的文件i_Vba_File_Kill_Delete File - Fatal编程技术网

Vba Kill命令删除错误的文件i

Vba Kill命令删除错误的文件i,vba,file,kill,delete-file,Vba,File,Kill,Delete File,在Access VBA中,我编写了一个程序来执行此操作: 允许用户选择zip文件 将zip文件中的任何文件解压缩到同一目录(在此 特定的用例实例,它总是从中提取Excel文件 Zip文件,从不进行任何更改,并且始终使用相同的密码) 然后,我希望代码在解压后删除Zip文件 .xls文件 除删除文件部分外,所有操作都运行良好。问题是,当我告诉它删除“FileName.Zip”时,它正在删除“FileName.Zip”和“FileName.xls” 有没有办法确保他kill命令只删除我希望它删除的内容

在Access VBA中,我编写了一个程序来执行此操作:

  • 允许用户选择zip文件
  • 将zip文件中的任何文件解压缩到同一目录(在此 特定的用例实例,它总是从中提取Excel文件 Zip文件,从不进行任何更改,并且始终使用相同的密码)
  • 然后,我希望代码在解压后删除Zip文件 .xls文件
  • 除删除文件部分外,所有操作都运行良好。问题是,当我告诉它删除“FileName.Zip”时,它正在删除“FileName.Zip”和“FileName.xls”

    有没有办法确保他kill命令只删除我希望它删除的内容?我以前在各种场合使用过它,以前从未发生过这种情况

    以下是我正在使用的代码:

    Dim fd As FileDialog
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim i As Variant
    
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tblProjectPath")
    
    Set fd = FileDialog(msoFileDialogFilePicker)
    fd.AllowMultiSelect = True
    fd.Title = "Select TOC Return File(s) to process"
    fd.InitialFileName = rs.Fields("ProjectPath") & "\FilingReports\*.zip"
    fd.Show
    
    For Each i In fd.SelectedItems
        'Debug.Print i
        Debug.Print '------------------------'
        Debug.Print i
        Unzip (i) 'The bit calling the command line unzip utility to unzip the file - just telling it to extract all files to the current folder.
        Debug.Print i
        'Kill i
        'had to take out the kill bit, b/c it was deleting both the .zip and .xls files which is not desired nor expected
        If InStr(i, ".zip") Then
            Kill i 'Tried to specify only .zip files even though think I shouldn't need to, but it's still deleting .xls files
        End If
    Next i 
    
    编辑:将解压缩代码添加到帖子: 解压码:

    Sub Unzip(Path As String)
        Dim strUnzip As String
        Dim QU As String 'quotation mark
        QU = Chr(34)
    
        strUnzip = QU & "c:\program files (x86)\winzip\wzunzip" & QU & " -s" & _
            "ZipPassword " & _
            Path & " " '& _
    
        Call Shell(strUnzip)
    
    End Sub
    

    在这一点上,我真的不认为会有一个“真正的”答案。然而,无论如何,我将发布我决定对我编写这段代码的特定过程所做的事情

    我将使用文件夹结构来分割文件: 1.放置zip文件 2.将文件解压缩到第二个文件夹 3.处理完第二个文件夹中的Excel文件后,移到第三个“完整”文件夹

    这将避免删除错误的文件位

    此外,问题的原因似乎与上面解压代码中对WinZip命令行解压实用程序(wzunzip)的调用有关,或者与工具本身有关。我想可能是b/c工具问我是否要覆盖现有文件,但事实并非如此,b/c我在没有要覆盖的文件时也遇到了同样的问题


    不管怎样,我正试图在这一点上结束这个。感谢Wayne G.Dunn在这方面的帮助。

    您的“If InStr(i,“.zip”)Then”不正确。。。它应该是“如果InStr(1,i,“.zip”),那么“您的代码将始终是正确的。实际上,代码是正确的。根据内置的帮助文件,1是一个可选值,我不需要指定它。但是谢谢你的努力。我确实试过你的建议,但得到了同样的结果。我最终可能会放弃kill命令,转而使用FileSystemObject?我刚刚运行了你的代码,它只删除了一个文件(我手动解压缩了文件)。尝试以下操作:(a)在“解压”上放置断点;(b) 将代码运行到断点,然后手动解压缩文件;(c) 跳过你的解压语句;(d) 跑过“杀戮”;(e) 检查文件夹是否删除错误。谢谢!是的,我会深入了解解压后的密码。它基本上只是运行对wzunzip(WinZip的命令行解压实用程序)的命令行调用。。我马上就把它发到这里..在主帖子中添加了解压码。“Path”是从“i”变量中提取的文件路径,该变量从FileDialog中提取文件路径。