I can't see anything wrong with the code, except I question the use of "Set ctrl ..." just to get a value from a text box. And Since you created a pointer, you should destroy it by the statement "Set ctrl = Nothing".
This is how I would have written the code
Code:
Option Compare Database
Option Explicit
Private Sub lblPrintCertificate_Click()
Dim strWhere As String
Dim strReport As String
Dim CertName As String
'Dim ctrl As Control
strWhere = "[ID]=" & Me.txtRegistrationID
CertName = Me.txtCertificateType
'Set ctrl = Me.txtCertificateType
'If Not IsNull(ctrl) Then
If Not IsNull(CertName) Then
Select Case CertName
Case "C. Certificate"
strReport = "rptCompletionCertificate"
Case "A. Certificate"
strReport = "rptAchievementCertificate"
Case "Diploma"
strReport = "rptDiploma"
End Select
DoCmd.OpenReport strReport, acViewPreview, , strWhere
End If
End Sub