0

我在一个模块中有一个 MS Access VBA 过程,该模块对特定文件夹中的文件有一个 for each 循环。

在循环内部,我在一个单独的文件夹中创建了一个新文件,然后用循环中文件中的清理数据填充该文件。我将新文件的数据导入 SQL Server 2005 数据库。成功导入后,脚本会删除已清理的文件并尝试将循环中的文件移动(或复制/删除)到同一目录中的存档子文件夹。

文件循环适用于循环文件夹中的所有文件......除了最后一个文件。那是弹出 Permission Denied 错误的时候。

在上述情况下,错误消息总是发生在以下之一(我尝试了几个类似的命令):

fso.MoveFile
fso.DeleteFile (just after copy)
f.Move
f.Delete (just after copy)
Name origin As destination

这是我的代码:

Dim fso As New Scripting.FileSystemObject
Dim f As file
Dim processingFiles As Files

If fso.FolderExists(incomingPath) Then
    Set processingFiles = fso.GetFolder(incomingPath).Files
End If

For Each f In processingFiles

    /*this is where the create a new file and clean it part runs - works fine*/

    If fso.FileExists(archivePathFile) Then
        Kill archivePathFile
    End If

    If fso.FileExists(tempPath & "\cleaned_processing_file.txt") Then
        Kill tempPath & "\clean_processing_file.txt"
    End If


    f.Move archivePathFile   '<------------- Permission Denied, last file in folder
    Debug.Print f.Name & " is now in " & incomingPath & "\Archive"

    'f.Copy archivePathFile, True 
    'f.Delete True '<----------------------- Permission Denied, last file

    'Name origPathFile As archivePathFile '< Path/File access error, last file

Next '<--- For Each Loop
4

2 回答 2

1

我将此作为“答案”发布,因此代码会显示出来,但您(显然)不必接受它......

我刚刚测试了最小的情况......

Sub move_to_foo()
Dim fso As New FileSystemObject
Dim processingFiles As Files, f As File
Set processingFiles = fso.GetFolder("C:\__tmp").Files
For Each f In processingFiles
    Debug.Print "Moving """ & f.Name & """..."
    f.Move "C:\__tmp\foo\" & f.Name
Next
End Sub

...并且它不会在文件夹中的最后一个文件上失败,因此您的问题必须与您的代码有关。如果您选择编辑您的问题并提供更多详细信息,那么我很乐意提供帮助,但现在您的问题 - 如前所述 - 没有答案。

于 2013-03-15T22:53:03.930 回答
1

我和你有完全相同的问题。除最后一个文件外,所有文件都将从源目录直接移动到目标目录,这将导致显示“Permission Denied”。如果有 2 个文件或 30 个文件,就会发生这种情况。在移动文件之前,我正在将数据从文件复制到 SQL 数据库。解决方案是在对象用于解析文件和插入 SQL 数据后,将其设置为“Nothing”。

例如,插入 SQL 脚本数据后,可以移动文件。释放对象资源:

Set objFSO = Nothing
Set objTextFile = Nothing
于 2013-05-18T00:53:55.850 回答