Compare what you must have got in the email notification to what the post ended up being. I mis-read your code. I agree with Welshgasman - it looks ok from a code perspective and you need to step through it and report what happens. Put a break at the beginning and step through (by clicking your button). IF it doesn't run at all, then somehow your code is disconnected from your control. In that case, re-select the event in the property sheet for the button. All I can do at the moment to "fix" anything is the presentation, like this:
Code:
Private Sub cmdPrint_Click()
'Print current record using rptENVELOPE
If IsNull(Me!ID) Then
MsgBox "Please select a valid record", vbOKOnly, "Error"
Exit Sub
End If
DoCmd.OpenReport "ENVELOPE", , , "ID = " & Me!ID
End Sub
Last, I would use Me.anything (dot) not Me!anything Any Me! reference is ignored upon compile, so a misspelled reference won't get caught until run time, which will then raise an error. I also see you are not using Option Explicit. A wiser person than me once said "if you don't use Option Explicit, you deserve what you get."