You should also declare all your variables and update the fields when the processing is completed.
If you have fields that are not in the body of the document you will need to ensure that they are updated also.
Code:
Private Sub cmdOK_Click()
Dim i As Long
Dim StrOut As String
Dim oVars As Variables
Set oVars = ActiveDocument.Variables
Hide
oVars("var1").value = Surname.value
For i = 0 To Services.ListCount - 1
If Services.Selected(i) Then
StrOut = StrOut & Services.List(i) & vbCr
End If
Next i
oVars("var3").value = StrOut
UpdateAllFields
Set oVars = Nothing
Unload Me
End Sub
Private Sub UpdateAllFields()
Dim oStory As Range
For Each oStory In ActiveDocument.StoryRanges
oStory.Fields.Update
If oStory.StoryType <> wdMainTextStory Then
While Not (oStory.NextStoryRange Is Nothing)
Set oStory = oStory.NextStoryRange
oStory.Fields.Update
Wend
End If
Next oStory
Set oStory = Nothing
lbl_Exit:
Exit Sub
End Sub