In general what I would do is put the Default values for each control in its .Tag property (at design time or start up)
Then I would have a butReset tied to code like this.
Private Sub butReset_Click()
Dim oneControl as MSForms.Control
For Each oneControl in Me.Controls
Select Case TypeName(oneControl)
Case "TextBox", "CheckBox", "ComboBox", "OptionButton"
oneControl.Value = oneControl.Tag
End Select
Next oneControl
butReset.Enabled = False
End Sub
Then each control's change event would call this sub
Sub ResetEnablement()
Dim Enablement as Boolean
Dim oneControl as MSForms.Control
Enablement = True
For Each oneControl in Me.Controls
Select Case TypeName(oneControl)
Case "TextBox", "CheckBox", "ComboBox", "OptionButton"
Enablement = Enablement And (oneControl.Tag <> CStr(oneControl.Value))
End Select
Next oneControl
butReset.Enabled = Enablement
End Sub
Alternatly, you could just set the butReset.Enabled to True in every Change event without looking to see if the Change is "change back to default"
Bookmarks