权限有时被拒绝杀死/删除文件

时间:2017-11-04 17:39:09

标签: vba excel-vba delete-file permission-denied excel

很抱歉,如果已经在其他地方得到了解答,我找不到与我有同样问题的人。

我有一个Excel程序,它依赖于阅读,追加和创建文本文件。自启动此项目以来我遇到的一个问题是有时,每运行10到100次代码,我得到一个“运行时错误'70':权限被拒绝”错误时试图杀死/删除文本文件。

我已经对错误代码做了一些研究,但这并没有多大帮助。我没有得到的是为什么它在大多数时间都有效。如果我尝试继续执行代码,它就可以正常工作。

早些时候,我已经推测,在Excel试图杀死它之前,文件有时没有时间关闭。我尝试创建一个等待文件关闭的函数,所以除非我的代码不起作用,否则我认为这不是问题。

这是关闭和删除文件的代码。注意,它始终停止在“Kill”命令上。 “isFileOpen”和“dir”命令只是检查错误是否是由于1)文件尚未关闭,以及2)文件尚未被删除。

Close textfileorg
Close textfileNew
    'Erstatter gammelt reg med nytt reg
Do While isFileOpen(filepathorg): Loop
Kill filepathorg
Do While dir(filepathorg) <> "": Loop

Do While isFileOpen(filepath): Loop
Kill filepath
Do While dir(filepath) <> "": Loop

Name filepathNew As filepathorg

如果相关,这是我的“文件打开”检查:

Function isFileOpen(ByRef filepath As String)

Dim textfile As Integer
textfile = FreeFile

On Error GoTo fileOpenErr

    'Forsøker å åpne fil
Open filepath For Random As textfile
Close textfile

    'Om ok, returner at fil ikke er åpen
isFileOpen = False

Exit Function

    'Ved error, returner at fil var åpen
fileOpenErr:
    isFileOpen = True

End Function

我想通过使用

行代码可以避免这个问题
failToKillFile:
    application.wait(time)
    resume

但我觉得这只是避免了这个问题。即使我要使用此代码,我想知道为什么错误发生在第一位。谢谢你的帮助。

编辑:正如我发布的那样,我在尝试复制文件时遇到了类似的错误,副本必须替换文件。按继续,一切正常。

3 个答案:

答案 0 :(得分:1)

将代码更改为all.equal(unnest(x_mp),unnest(x)) x_mp TRUE # A tibble: 10 x 2 id stat_summary <int> <list> 1 3 <tibble [1 x 6]> 2 5 <tibble [1 x 6]> 3 6 <tibble [1 x 6]> 4 7 <tibble [1 x 6]> 5 1 <tibble [1 x 6]> 6 2 <tibble [1 x 6]> 7 4 <tibble [1 x 6]> 8 8 <tibble [1 x 6]> 9 9 <tibble [1 x 6]> 10 10 <tibble [1 x 6]> 行 到client.connect(); async function rows() { await client.query("SELECT * FROM accounts WHERE proceeded = false", function (err, result) { return result.rows.length; }); } while (parseInt(rows(),10) > 0) { do some work }

完整代码https://support.microsoft.com/en-us/help/291295/macro-code-to-check-whether-a-file-is-already-open

答案 1 :(得分:0)

我刚刚遇到了同样的问题,权限(显然)被随机拒绝但是......

它发生在我身上,因为在我想要删除的文件夹上打开了一个资源管理器窗口。

是的,就是这样。

答案 2 :(得分:0)

我遇到了这个问题,直到我将kill命令移到一个单独的子例程并从主例程调用它的情况下,似乎没有什么解决方案...

Sub KillWB()
Dim UPath As String, WB As String
UPath = "C:\Users\" & Environ("username")
WB = UPath & "\Temp.xlsx"
Kill WB
End Sub
相关问题