Firstly, this is not the best approach to screen validation. You should take advantage of controls "Validating" and "Validated" methods. But based on what you have done, I would do something as follows:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Try
Dim PassedValidation as Boolean = True
For Each item As Control In GroupBox1.Controls
If item.Text = Nothing Then
ErrorProvider1.SetError(item, "enter a value")
PassedValidation = False
Else
ErrorProvider1.SetError(item, "")
End If
Next
If PassedValidation Then
MessageBox.Show("Saved", "System")
End If
Catch ex As Exception
End Try
End Sub
This way all the validation runs, then if any one or more fail to validate then the save function will not execute.
Your code was currently going to try and save each time a control passed validation.