I'm having trouble with an error handling in VBA excel.
Basicaly, I have a situation where I'm dealing with multiple errors within same error handling block.
To make things really simple let's just say:
Sub some_function ()
On Error go to step1
step2:
some code which triggers an error
Exit Sub
step1:
Okay, so far so good.
Problem is, that in this block of code can also occur an error
with the same Err.Number but I have to deal with him on other way
which is not specified in this block of code.
go to step 2
End sub
I'm using SAP session to connect to SAPgui and I cannot predict which error will occur. If I can catch an error within error handling block of code I can solve this situation.
So basicaly I'm blind foilded. If an error occurs I try to do some other things and if it works OK, but if an error occurs second time (within error handling block) it will throw me an error.
Is there any walkaround?
UPDATE:
just thinking out loud.
If I use On Error Resume next statement and do as following:
On Error Resume next
some code,
line of code that could trigger an error
if Err.Number <> 0 Then
try to handle an error
Err.Clear
End if
line of code that could also trigger an error
If Err.Number <> 0 Then
Try to handle an error
Err.Clear
End If
Would that be OK? or is there any better solution?
Is it possible to use Resume next statement within the procedure in only a certain block of code? Let's just say we have a procedure with 20 lines, and I would like to use Resume Next statement between 10th and 15th line.. Is it possible to enable and disable Resume next statement, or on Error line?
How about putting the code in step 2 into a separate procedure? There, you can do separate error handling with a new on error goto statement.
Related
I have the following code:
Sub test()
On Error GoTo Label
Debug.Print 1 / 0
Exit Sub
Label:
MsgBox "Infinity!"
End Sub
If I run this code on my laptop, I get "Infinity", as I expected. However... When I run it on my desktop, excel throws an error message Runtime error 11 ... Division by zero
Has anyone ever experienced this before? It's almost like my Excel desktop client has just 'forgotton' how to handle errors...
Most likely this is due to different settings in your VB editor under
Tools>>Options>>General>>Error Trapping
If set to "Break on all errors" then that's what it does...
I have an Excel macro I've called for years I need a pause in running code. Here's the macro:
Sub timeFrame(PauseTime As Double)
'
Dim Start As Double
Start = timer
Do
DoEvents
Loop Until (timer - Start) >= PauseTime
End Sub
I just ran a macro that calls the one above and got an "Expected Function or variable" compile error with the Start = time line highlighted. In troubleshooting, I established that the error occurs with any macro that contains the same line. I even went to MSDN and copied their sample code, and got the same error when I tried to run it.
I thought I might have a missing library reference but nothing showed up there. After an hour or so of Googling I'm at a complete loss for a reason for the error, and would greatly appreciate some fresh insight.
This can happen if you have a Function or Sub that shares the same name as the Module. Every name must be unique. Even the Modules.
A little background:
I am writing some very basic error handling for a macro that runs some pretty important company processes.
As nobody here at work is a true software engineer, the time we can devote to writing error handling routines is not significant.
Anyway, there's a routine that runs every night on a schedule and it processes several reports (in excel) that were completed throughout the day. This routine runs fine for the most part, but since it occurs in the background I have no way of knowing if something went wrong during the previous night's update unless I check on it every morning.
So the error handling I have in place at the moment is that on error - any error - it sends me an email saying "hey something went wrong" (or something to that effect). This lets me aware of any intermittent errors that pop up before the other departments see them, without having to "helicopter parent" the system, so to speak.
My question is:
I have this fantasy in my head that within the email, it would have the text of the line where the error occurred. It's not the biggest deal not to have this, but it would speed up the process of troubleshooting a little bit.
Googling this is proving a little frustrating... does anyone know if this is possible, and how I would go about doing this?
You can send yourself a line number so that you could find the offending line
The line numbers can be added easily using Mz-Tools
Sub ErrTest()
10 On Error GoTo ErrHandler
20 Range("Derp").Select
30 On Error GoTo 0
40 Exit Sub
ErrHandler:
50 Email "example#email.com", _
Subject:="Error " & Err.Number, _
Body:="Error " & Err.Number & "(" & Err.Description & ") occured in ErrTest on line " & Erl & "."
End Sub
You can retrieve a line of code if you have "Trust access to the VBA project object model" checked in the trust center.
Sub Test()
Dim LineCount As Long
LineCount = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.CountOfLines
'Print every line in Module1 (lines 1 to LineCount)
Debug.Print ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.Lines(1, LineCount)
End Sub
This could be used to email yourself the specific line number. You would have to add line numbers to every line of code and use Erl in order for this to work.
I have not had much experience with VBA, but I sometimes use it at work. Recently, I have encountered a problem that shouldn't happen, and that neither my boss nor myself can figure out.
Basically, the issue is that the Application property DisplayAlerts is set to True by default and can't be changed for some reason. Possibly related is that when I hit an error, it always display the End|Debug|Help alert and never hits the applied error handling.
I am running 64-bit Office 2010 on a 64-bit Windows 7 machine. However, I do not believe it to be a platform issue, as I have tested on multiple different platforms, operating systems and software permutations and no other machine has this error; just mine.
I have created some sample code in case anyone has encountered this before or has any ideas. The only thing I can think of, is that I have something installed on my machine that is causing this. But after a program purge and many restarts, I am no closer to deciphering what it might be.
Public Sub TestErrorHandler()
' Suppress alerts
Application.DisplayAlerts = False
Dim strArray(1) As String
strArray(0) = "Hello"
strArray(1) = "World"
' Set up error handler
On Error GoTo ErrHandler
For i = 0 To 3
MsgBox strArray(i)
Next
' Strip the error handler
On Error GoTo 0
' Unsuppress alerts
Application.DisplayAlerts = True
Exit Sub
ErrHandler:
MsgBox "Error: " & Err.Description
Resume Next
End Sub
The error is thrown on the third enumeration of the for-loop (as it should). The type of the error is irrelevant, what is relevant is that I get the error and never hit the error handler.
Any suggestions or help on this would be greatly appreciated.
Many thanks!
Press ALT + F11 from within Excel to reach VBA editor.
Goto Tools menu -> Options item -> General tab.
Set the error trapping to "Break on unhandled errors"
(source: microsoft.com)
I am building a data validation system (to check entries in cells) that is referring to a dynamically built named range. Sometimes the range does not exist and I have the "Error in loading DLL message".. is there a way to disable it? Thanks.
If you don't have to know wether the error was triggered then try this:
On Error Resume Next
<code accessing the named range>
On Error Goto 0
If you need a way to check wether the error would have been raised:
Dim flag as Boolean
flag = False
On Error Resume Next
<code accessing the named range>
flag = True
On Error Goto 0
Flag will only become True if the critical code has been executed successfully
I know its dirty but so is VBA ;o)