kill/delete 文件的权限有时被拒绝
Permission sometimes denied to kill/delete file
我有一个 Excel 程序依赖于读取、追加和创建文本文件。
自从开始这个项目,每10-100次,我得到一个
"Run-time error '70': Permission denied"
尝试 kill/delete 文本文件时出错。
如果我继续执行代码,它会起作用。
我已经对错误代码进行了一些研究,但这并没有太大帮助。
早些时候,我推测文件没有时间关闭,在 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
这是我的 "is file open" 支票:
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
我觉得这是在回避问题。我想知道为什么首先会发生错误。
编辑:正如我发布这篇文章时,我在尝试复制文件时遇到了类似的错误,其中副本必须替换文件。按继续,一切正常。
更改代码行 Open filepath For Random As textfile
至 Open filepath For Input Lock Read As textfile
完整代码https://support.microsoft.com/en-us/help/291295/macro-code-to-check-whether-a-file-is-already-open
我刚刚遇到了同样的问题,权限(显然)被随机拒绝但是...
它发生在我身上是因为在我想删除的文件夹上打开了一个资源管理器 window。
是的,就是这样。
我遇到了这个问题,似乎没有任何解决办法,直到我将 kill 命令移到一个单独的子例程中并从主例程中调用它......在我的例子中:
Sub KillWB()
Dim UPath As String, WB As String
UPath = "C:\Users\" & Environ("username")
WB = UPath & "\Temp.xlsx"
Kill WB
End Sub
我有一个 Excel 程序依赖于读取、追加和创建文本文件。
自从开始这个项目,每10-100次,我得到一个
"Run-time error '70': Permission denied"
尝试 kill/delete 文本文件时出错。
如果我继续执行代码,它会起作用。
我已经对错误代码进行了一些研究,但这并没有太大帮助。
早些时候,我推测文件没有时间关闭,在 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
这是我的 "is file open" 支票:
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
我觉得这是在回避问题。我想知道为什么首先会发生错误。
编辑:正如我发布这篇文章时,我在尝试复制文件时遇到了类似的错误,其中副本必须替换文件。按继续,一切正常。
更改代码行 Open filepath For Random As textfile
至 Open filepath For Input Lock Read As textfile
完整代码https://support.microsoft.com/en-us/help/291295/macro-code-to-check-whether-a-file-is-already-open
我刚刚遇到了同样的问题,权限(显然)被随机拒绝但是...
它发生在我身上是因为在我想删除的文件夹上打开了一个资源管理器 window。
是的,就是这样。
我遇到了这个问题,似乎没有任何解决办法,直到我将 kill 命令移到一个单独的子例程中并从主例程中调用它......在我的例子中:
Sub KillWB()
Dim UPath As String, WB As String
UPath = "C:\Users\" & Environ("username")
WB = UPath & "\Temp.xlsx"
Kill WB
End Sub