vba-echte radio button aus der Gruppe val

In Excel-VBA:

Ich erstelle ein Formular. Diese form hat mehrere radio-button-Gruppen, von denen einige viele Optionen (aber nur ein radiobutton kann der Fall sein, pro Gruppe). Ich möchte in der Lage sein, um den Namen der radiobutton-das ist "wahr" pro Gruppe, statt vorher zu prüfen, jede radio-button-Zustand.

Zum Beispiel:

FAMILIE EIN

  • Option1 - F
  • Option2 - T

FAMILIE B

  • Option11 - F
  • Option12 - F
  • Option13 - F
  • Option14 - F
  • Option15 - T

Was ich zu tun habe:

  • Ist Option1 Wahr?
  • Ist Option2 True? (ja... so Option2 für die Familie A)
  • Ist Option11 Wahr?
  • Ist Option12 Wahr?
  • Ist Option13 Wahr?
  • Ist Option14 Wahr?
  • Ist Option15 Wahr? (ja... so Option15 für die Familie B)

, Was ich tun möchte:

  • Taste, die Wahr ist für die Familie Ein? (Option2)
  • Welche Taste ist auch für Familie B? (Option15)

Ist das möglich?

Dank für das schauen!

EDIT:
Das ist die Lösung! Basierend auf David ' s Beratung unter:

Dim ctrl As MSForms.Control
Dim dict(5, 1)
Dim i

'## Iterate the controls, and associates the GroupName to the Button.Name that's true.

For Each ctrl In Me.Controls
    If TypeName(ctrl) = "OptionButton" Then
        If ctrl.Value = True Then
            dict(i, 0) = ctrl.GroupName
            dict(i, 1) = ctrl.Name
            i = i + 1
        End If
    End If
nun, wie definieren Sie die Gruppen/Familien? Sind die buttons innerhalb von Frames? Wie würden Sie wissen, wenn eine Gruppe beginnt und endet? Es ist nicht möglich, dies zu erreichen, ohne irgendeine Art von iteration oder ohne eine zusätzliche variable zum speichern der true Tasten Namen zu allen Zeiten.
Die Gruppe/Familie name ist eine Eigenschaft mit dem Namen GroupName. es werden alle zu der gleichen Gruppe standardmäßig, aber Sie können ändern, die Eigenschaft zum erstellen von neuen Familien. Also jeder radiobutton weiß, zu welcher Gruppe es gehört, weil es hat, gespeichert in der GroupName-Eigenschaft.
Buttons in frames zu sein scheint, die einen viel zuverlässiger als die GroupName-Eigenschaft. In jedem Fall sind Sie sicher gehen zu müssen, Durchlaufen jede Gruppe in einem For...Next loop mit Exit For - Anweisung, wenn die True gefunden wird. Dies ist nicht besonders kompliziert. Ich werde sehen, ob ich mir vorstellen kann, etwas, das könnte einfacher sein, mit Ihrem set-up.
Ich dachte an eine Klasse (Liste), die speichert alles wahre, da kann es nur eine einzige wahre für Familie, müssen Sie Sie nur speichern Sie die Familie, und es ist aktuellen Wert true. Dies würde nur verlangen, soweit iteration die Liste ist lang = Menge der Familien.

InformationsquelleAutor Amit Kohli | 2014-03-31

Schreibe einen Kommentar