Vba 如何将错误号捕获到变量中
我在ExcelVBA中编写了一个代码,最初检查定义的word文档是否已打开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
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-是的,它设置为“在所有错误时中断”,我需要更改它吗?是的,我删除了第二条“出错时继续下一步”语句