Excel VBA:在网络路径上获取文件状态不一致

时间:2017-10-04 23:11:21

标签: excel vba excel-vba

我正在尝试修复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至少让处理器以最佳方式运行,但这没有帮助,所以它似乎确实是一个网络问题。最终,使用这种或其他方法,我需要一种方法来在网络驱动器上的以下情况之间始终如一地疏远:

  1. 文件已存在

  2. 文件不存在,但文件路径存在

  3. 文件路径不存在

  4. 任何帮助都将不胜感激,谢谢。

0 个答案:

没有答案