Vba 如何将错误号捕获到变量中

Vba 如何将错误号捕获到变量中,vba,excel,ms-word,Vba,Excel,Ms Word,我在ExcelVBA中编写了一个代码,最初检查定义的word文档是否已打开 If IsFileOpen(pathh) Then MsgBox " Already in use" Else MsgBox "Not in use" End If Function IsFileOpen(pathh As String) Dim filenum As Integer, errnum As Integer On Error Resume Next ' Turn error

我在ExcelVBA中编写了一个代码,最初检查定义的word文档是否已打开

If IsFileOpen(pathh) Then
 MsgBox " Already in use"

 Else
 MsgBox "Not in use"

 End If


Function IsFileOpen(pathh As String)
   Dim filenum As Integer, errnum As Integer

   On Error Resume Next   ' Turn error checking off.
   filenum = FreeFile()   ' Get a free file number.
   ' Attempt to open the file and lock it.
   On Error Resume Next
   Open pathh For Input Lock Read As #filenum

   Close filenum          ' Close the file.
   errnum = Err           ' Save the error number that occurred.
   On Error GoTo 0        ' Turn error checking back on.

   ' Check to see which error occurred.
   Select Case errnum

       ' No error occurred.
       ' File is NOT already open by another user.
       Case 0
           IsFileOpen = False

       ' Error number for "Permission Denied."
       ' File is already opened by another user.
       Case 70
           IsFileOpen = True

       ' Another error occurred.
       Case Else
           Error errnum
    End Select
    End Function
但问题是,如果我在运行此代码之前已打开word文档,但未在select case代码段中输入,则会出现错误70(权限被拒绝)

相反,它会抛出一个,并在之后停止代码的进一步执行

   Open pathh For Input Lock Read As #filenum


我想捕获错误号并将其输入到select案例中,在该案例中,无论文件是否打开,它都会显示相应的消息

errnum=Err.number
,但代码执行在分配errnum之前停止,它会抛出错误消息(我已在上面显示),并且不会继续执行。虽然我在方法的开头提到了“On Error Resume Next”,但它仍然不会进入下一步。您必须使用On Error语句捕获错误,否则运行时将接管。这样做,您就可以访问错误对象。您的VBE是否设置为在出现所有错误时中断(工具-选项,常规选项卡)?顺便说一句,您的第二个
On Error Resume Next
语句将清除错误,因此您需要删除该错误。@Rory-是的,它设置为“在所有错误时中断”,我需要更改它吗?是的,我删除了第二条“On Error Resume Next”语句
errnum=Err.Number
,但是代码执行在分配errnum之前停止,它抛出了错误消息(我已经在上面显示过),并且不会继续执行。虽然我在方法的开头提到了“On Error Resume Next”,但它仍然不会进入下一步。您必须使用On Error语句捕获错误,否则运行时将接管。这样做,您就可以访问错误对象。您的VBE是否设置为在出现所有错误时中断(工具-选项,常规选项卡)?顺便说一句,您的第二个
On Error Resume Next
语句将清除错误,因此您需要删除该错误。@Rory-是的,它设置为“在所有错误时中断”,我需要更改它吗?是的,我删除了第二条“出错时继续下一步”语句