Vba excel多次出错转到
我试图让多个on-error语句正常工作,但无法解决这个问题 如果pdf可以在本地找到,则打开,如果没有,则打开网络位置。如果文件中没有PDF,则返回msgboxVba excel多次出错转到,vba,excel,Vba,Excel,我试图让多个on-error语句正常工作,但无法解决这个问题 如果pdf可以在本地找到,则打开,如果没有,则打开网络位置。如果文件中没有PDF,则返回msgbox Sub Cutsheets() Application.ScreenUpdating = False Dim finalrow As Integer finalrow = Cells(Rows.Count, 1).End(xlUp).Row On Error GoTo net1 If Not Application.Inters
Sub Cutsheets()
Application.ScreenUpdating = False
Dim finalrow As Integer
finalrow = Cells(Rows.Count, 1).End(xlUp).Row
On Error GoTo net1
If Not Application.Intersect(ActiveCell, Range("A9:A" & finalrow)) Is Nothing Then
'Local Location
ActiveWorkbook.FollowHyperlink "C:\Local" & ActiveCell & ".pdf"
Application.SendKeys "{ENTER}", True
End If
Exit Sub
net1:
If Not Application.Intersect(ActiveCell, Range("A9:A" & finalrow)) Is Nothing Then
'Network Location
On Error GoTo whoa
ActiveWorkbook.FollowHyperlink "P:\Network" & ActiveCell & ".pdf"
Application.SendKeys "{ENTER}", True
End If
Exit Sub
whoa:
MsgBox ("No cutsheet can be found for this item.")
Application.ScreenUpdating = True
End Sub
我也不记得为什么我把
sendkeys
放在那里,但是没有它它就不能工作。在错误上使用多个处理程序转到XYZ
控制流会使一些简单的验证检查复杂化,然后只需对实际错误使用错误处理
正如@Rory在评论中指出的,您可以使用该函数。您可以将Dir
的使用与If…ElseIf…Else…End If
构造相结合,以控制代码的功能:
Option Explicit
Sub Cutsheets()
On Error GoTo ErrHandler
Dim strLocalCheck As String
Dim strNetworkCheck As String
'check for files - Dir will return "" if file not found
strLocalCheck = Dir("C:\Local" & ActiveCell.Value & ".pdf")
strNetworkCheck = Dir("P:\Network" & ActiveCell.Value & ".pdf")
'control flow
If strLocalCheck <> "" Then
ActiveWorkbook.FollowHyperlink strLocalCheck
Application.SendKeys "{ENTER}", True
ElseIf strNetworkCheck <> "" Then
ActiveWorkbook.FollowHyperlink strNetworkCheck
Application.SendKeys "{ENTER}", True
Else
MsgBox "No cutsheet can be found for this item."
End If
Exit Sub
ErrHandler:
Debug.Print "A real error occurred: " & Err.Description
End Sub
选项显式
子切纸()
关于错误转到错误处理程序
Dim strLocalCheck As字符串
Dim strNetworkCheck作为字符串
'检查文件-如果找不到文件,目录将返回“”
strLocalCheck=Dir(“C:\Local”和ActiveCell.Value&“.pdf”)
strNetworkCheck=Dir(“P:\Network”和ActiveCell.Value&“.pdf”)
“控制流
如果选中“”,则
ActiveWorkbook.FollowHyperlink strLocalCheck
Application.SendKeys“{ENTER}”,True
否则,请检查“”然后重试
ActiveWorkbook.FollowHyperlink strNetworkCheck
Application.SendKeys“{ENTER}”,True
其他的
MsgBox“找不到此项目的剪切表。”
如果结束
出口接头
错误处理程序:
Debug.Print“发生实际错误:”&Err.Description
端接头
我正在尝试让多个on错误语句正常工作
不要
假设您是VBA运行时。您正在执行一个名为Cutsheets
的过程,遇到以下指令:
On Error GoTo net1
从那时起,在你对着用户脸发火之前,如果你遇到运行时错误,你将跳转到net1
标签。所以你继续运行指令。最终您运行以下行:
ActiveWorkbook.FollowHyperlink "C:\Local" & ActiveCell & ".pdf"
当FollowHyperlink
方法响应“呃,不,不能那样做”并引发运行时错误时,您的执行上下文将发生更改
您处于“错误处理”模式
因此,您可以跳转到net1
标签您处于“错误处理”模式。在“正常执行模式”中,您可以做一些在“错误处理模式”中不能(或不应该)做的事情。提出和处理更多错误就是其中之一
On Error GoTo whoa
您已经在处理一个运行时错误:当您在错误处理程序子例程中遇到该语句时,应该怎么做?马上跳到哇
当VBA运行时处于“错误处理模式”时,作为程序员,您的工作是处理运行时错误,并尽一切可能尽快回到“正常执行模式”——这通常通过恢复
指令或离开当前作用域来完成
从“正常执行路径”复制一段代码并尝试在“错误处理模式”下运行(稍微更改)不会处理错误并尽快返回正常执行模式
不管是否处理错误,复制粘贴代码块都是写得很差的代码
而是提取一个过程:
Private Sub OpenPortableDocumentFile(ByVal path As String)
On Error GoTo ErrHandler
ActiveWorkbook.FollowHyperlink path
Application.SendKeys "{ENTER}", True
Exit Sub
ErrHandler:
MsgBox "Could not open file '" & path & "'."
End Sub
现在已经解决了这个问题,在将无效的路径
传递到OpenPortableDocumentFile
过程之前,通过验证文件是否存在来清理控制流
最好的错误处理策略是首先避免引发运行时错误。如果没有Resume语句、代码结束或错误转到-1时
,则无法清除异常。请参阅:您可以使用Dir
检查文件是否存在。@Robin如果它找不到任何东西,则会弹出MsgBox
,但当它应该找到PDF时,它什么也不做。除了您正在做的一些检查之外,我基本上遵循了您的逻辑。。。什么不起作用?@Robin没有打开超链接。知道为什么吗?@MattTaylor为什么不使用Shell
命令来打开PDF,而不是使用FollowHyperlink
和SendKeys
?不-抱歉-只是从您的代码中复制了这一部分。我只是想向您展示一种更好的方法来执行控制流并避免出现多个On错误语句。嗯