Getting Information from a Dialog Box

You can read and set the state of dialog box controls at any time. Typically, you set initial conditions before the dialog sheet runs or use a procedure assigned to the DialogFrame object to set controls when the dialog box starts. You will usually read controls when a specific event occurs in the dialog box or when the user dismisses the dialog box.

The ChangeColor procedure runs whenever the user clicks either Test or OK. This procedure saves the current color of the selected object and then reads the option buttons to determine the new color.


Sub ChangeColor()
    Dim selInterior As Interior
    With DialogSheets("ChangeColorDialog")
        Set selInterior = Selection.Interior
        saveInteriorColor = selInterior.ColorIndex
        selInterior.ColorIndex = colors(GetOptionIndex(.OptionButtons))
    End With
End Sub

The GetOptionIndex function scans the option buttons and returns the index value of the button that's turned on (the button's ordinal value in the button tab order). This index number is used to return the correct color value from the colors array, as in the following example.


Function GetOptionIndex(opBtns As OptionButtons)
    For Each ob In opBtns
        If ob.Value = xlOn Then
            GetOptionIndex = ob.Index
            Exit Function
        End If
    Next
End Function

The dialog box also has an Undo button that causes the UndoColor procedure to run. This procedure saves the current color and then resets the color to the saved value.


Sub UndoColor()
    With Selection.Interior
        temp = .ColorIndex
        .ColorIndex = saveInteriorColor
        saveInteriorColor = temp
    End With
End Sub