It is better to avoid using the Selection object - especially if the bookmark is in a header, and as you may have realised you can simply call the message box from your code. The following uses a function to write to the bookmark and reset the bookmark to the new text, so it is easy to replace or remove the text. The bookmarks are accessed by name.
Code:
Sub chkVisa_Click()
If Me.chkVisa = True Then
FillBM "VisaHeader", "28. Visa Sponsorship"
FillBM "VisaText", "As an employee from outside the European Union you will require to have a company sponsored visa before commencing employment. The company will work with an appointed immigration specialist to ensure the correct clearance to work in the United Kingdom."
FillBM "VisaText2", "On completion of your probationary period, were you to leave the company within 24 months of your visa start date you will be required to pay back a percentage of the costs associated with obtaining the company sponsorship visa."
Else
FillBM "VisaHeader", ""
FillBM "VisaText", ""
FillBM "VisaText2", ""
End If
MsgBox "Hello"
End Sub
Private Sub FillBM(strBMName As String, strValue As String)
'Graham Mayor
Dim oRng As Range
With ActiveDocument
On Error GoTo lbl_Exit
Set oRng = .Bookmarks(strBMName).Range
oRng.Text = strValue
oRng.Bookmarks.Add strBMName
End With
lbl_Exit:
Set oRng = Nothing
Exit Sub
End Sub