• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 160
  • Last Modified:

On Error Excel 2007 VBA: Getting it in the right place

I want the Msgbox to show ONLY if file can't save or doesn't have values in the 3 cells. I never seem to be able to figure out where to put it so it does NOT pop up always.

Sub SaveBook()
'Saves the workbook

If Range("checksave").Value = 3 Then
MsgBox ("Created")
ActiveWorkbook.SaveAs Filename:=Range("path").Text & Range("filename").Text
On Error GoTo Err

::::My code here

Else: MsgBox ("You must enter a MID and Customer ID and Business Name before saving.")
Exit Sub
End If
Err:
MsgBox ("You must enter a MID and Customer ID and Business Name before saving.")
Worksheets("Dashboard").Shapes("Rounded Rectangle 50").Delete

End Sub

Open in new window

0
Dreamboat
Asked:
Dreamboat
  • 2
  • 2
2 Solutions
 
tdlewisCommented:
Swap lines 12 and 13 of your code so that you have:
Else: MsgBox ("You must enter a MID and Customer ID and Business Name before saving.")
End If
Exit Sub

Open in new window

0
 
hanklmCommented:
The On Error Goto command affects all commands in the Sub that follow it, so if you wanted to detect an error during file save, you would want the On Error statement  before the SaveAs call and any other statements you expect might fail.

If code logic detects an error, jump to error handling code.  In your example this avoids duplicating the MsgBox code, but it is worth noting that the SaveAs command can encounter a wide range of errors, so you might also want to check the value of ErrNo for situations like path-not-found or access-denied, etc.

Sub SaveBook()
'Saves the workbook

On Error GoTo Err
If Range("checksave").Value = 3 Then
MsgBox ("Created")
ActiveWorkbook.SaveAs Filename:=Range("path").Text & Range("filename").Text

::::My code here

Else
goto Err
End If

Exit Sub
Err:
MsgBox ("You must enter a MID and Customer ID and Business Name before saving.")
Worksheets("Dashboard").Shapes("Rounded Rectangle 50").Delete

End Sub

Open in new window

0
 
DreamboatAuthor Commented:
so you might also want to check the value of ErrNo for situations like path-not-found or access-denied, etc.
Nope. They won't get that. If they do, it'll be once and never again.

Thanks, guys! I'll check tomorrow at work. Happy Holidays!
0
 
DreamboatAuthor Commented:
Here's what I'm using, which appears to work. :)

Sub SaveBook()
'Saves the workbook

If Range("checksave").Value = 3 Then
MsgBox ("Created")
ActiveWorkbook.SaveAs Filename:=Range("path").Text & Range("filename").Text
On Error GoTo Err

:::My code here

Else: MsgBox ("You must enter a MID and Customer ID and Business Name before saving.")
Worksheets("Dashboard").Shapes("Rounded Rectangle 50").Delete
End If
Exit Sub

End Sub

Open in new window

0
 
hanklmCommented:
It looks like you removed the label: Err.  This is not good.  I'm not sure what the behavior will be when an error is encountered, but I doubt it will be what you want.

I suspect if you compiled the VBA project. It would tell you that the label could not be found. I highly recommend using the compile feature (Debug / Compile VBAProject).  It helps discover errors (like this one) you might otherwise miss.
0

Featured Post

Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now