我正在尝试修复Excel VBA宏中的间歇性错误,当我在网络驱动器上的文件上运行Open命令时,由于Excel返回不一致的错误代码而导致错误。 / p>
下面的GEN_File_Status函数返回一个整数代码,我的其他代码用它来确定文件的状态(作为fName参数传递)。一些错误代码(例如,52& 53)导致返回相同的值,因为我的调用代码不需要区分它们。 fName应包含完整的文件路径和文件名。
Public Function GEN_File_Status(ByVal fName As String) As Integer
Dim fileInd As Long
On Error GoTo errHandle
fileInd = FreeFile()
Open fName For Input Lock Read As #fileInd
Close fileInd
On Error GoTo 0
GEN_File_Status = 0 ' File exists and is unopened
Exit Function
errHandle:
Select Case Err.Number
Case 52 ' Bad filename or number
GEN_File_Status = -1
Case 53 ' File not found
GEN_File_Status = -1
Case 70 ' Permission denied (file may already be open)
GEN_File_Status = 1
Case 76 ' Path not found
GEN_File_Status = -2
Case Else ' Unknown error code
GEN_File_Status = -2
End Select
End Function
如果我在本地驱动器上运行,这可以正常工作,但是当我在网络驱动器上运行时,我偶尔会在调用代码中遇到崩溃,这显然是因为Excel放弃了#39;确定文件路径是否不存在,或者是否无法通过网络确定文件路径太快。这种失败并不要求网络在人类面前变得那么慢。标准 - 基于代码执行时间Excel必须相当快地放弃。
要进行故障排除,我故意在fName参数中使用网络上的无效路径,以查看Excel将返回的错误代码。果然,我大部分时间都得到Err.Number = 76(路径未找到),但也有一些时间也得到Err.Number = 53(找不到文件),这会导致问题在我的调用代码中。显然,两个错误代码在某种意义上都是正确的,但如果我在本地C驱动器上使用无效路径,我会一直得到“#76;' 76'错误代码。很明显,没有找到'路径。 76错误优先,我需要一种方法来一致地确定这一点。
有没有办法告诉Excel或多或少"放慢速度并正确获取错误代码"?我尝试在此之前插入DoEvents至少让处理器以最佳方式运行,但这没有帮助,所以它似乎确实是一个网络问题。最终,使用这种或其他方法,我需要一种方法来在网络驱动器上的以下情况之间始终如一地疏远:
文件已存在
文件不存在,但文件路径存在
文件路径不存在
任何帮助都将不胜感激,谢谢。