Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


Optionsbutton in Formular wechselweise auswählen
#1
Hallo zusammen,

ich habe ein Formular, in dem soll pro Zeile immer 1 von 3 oder 1 von 2 Knöpfen ausgewählt werden können.

Ich habe so begonnen:
Frage geschrieben und in die Folgespalte 3 Options-Buttons eingefügt. Nun kann ich von den 3 Buttons einen auswählen. Wenn ich einen anderen auswähle, wird die erste Wahl gelöscht.

Da es ungefähr 100 Fragen werden sollen, dachte ich, ich kopiere die Buttons in die Folgezeilen.

Wenn ich aber nun diese drei Buttons in die zweite Zeile kopiere, werden die 3 der zweiten Zeile mit den ersten 3 verknüpft, es geschieht also die Auswahl 1 aus 6 und nicht 2x 1 aus 3.


Wie kann ich das machen, daß immer nur in jeder Zeile 1 aus 3 ausgewählt werden kann?
Geht das mit diesen Knöpfen überhaupt?
Sollte ich andere Buttons nehmen? Welche?
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#2
Hallo Ralf,

wenn ich mich nicht irre, mußt Du die Buttons gruppieren. Und pro Gruppierung kannst Du dann wie gewünscht einen Button auswählen.
Gruß Stefan
Win 7 / Office 2007
to top
#3
Hallo Ralf,

bei ActiveX - Buttons geht das über die Eigenschaft GroupName. Wenn Du die einfügst, steht bei Excel normalerweise der Name des Tabellenblattes drin. Da machst Du bei den jeweils zusmamengehörenden was anderes draus, kann ja in Anlehnung an den Blattname z.B. Tabelle1_01, Tabelle1_02 sein.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
[-] Folgende(r) 1 Benutzer sagt Danke an schauan für diesen Beitrag:
Rabe
to top
#4
Hi Stefan,

(28.06.2014, 20:49)Steffl schrieb: wenn ich mich nicht irre, mußt Du die Buttons gruppieren. Und pro Gruppierung kannst Du dann wie gewünscht einen Button auswählen.

nein, das war es leider nicht. Aber Andrés Tipp hat geholfen, so geht es.
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#5
Hi André,

(28.06.2014, 20:53)schauan schrieb: kann ja in Anlehnung an den Blattname z.B. Tabelle1_01, Tabelle1_02 sein.

ja, das ist eine Lösung. Das geht, ist aber natürlich etwas mühsam bei 100 Fragen.

Kann ich diesen Namen auch automatisch ändern? Oder kann ich ein Makro schreiben, daß mir immer in die Zeile, in der in B was steht, in C, D und E einen ActiveX-Button einfügt und und diese 3 über den Namen verknüpft.

Ich habe mir folgenden umgangssprachlichen Code-Text ausgedacht:

Code:
Sub Buttons_erzeugen_umbenennen()
For i = 2 to 500
   j = 2
   If range("B" & i) <> "" then
      kopiere Button Tabelle1_01 in Range("C" & i)
      kopiere Button Tabelle1_01 in Range("D" & i)
      kopiere Button Tabelle1_01 in Range("E" & i)
      Rename Button Tabelle1_neu zu Button Tabelle1_j
   End If
   j = j + 1
Next i
End Sub

Geht das überhaupt?
Wie müßte das Makro lauten?
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#6
(28.06.2014, 21:01)Rabe schrieb: Hi Stefan,

(28.06.2014, 20:49)Steffl schrieb: wenn ich mich nicht irre, mußt Du die Buttons gruppieren. Und pro Gruppierung kannst Du dann wie gewünscht einen Button auswählen.

nein, das war es leider nicht. Aber Andrés Tipp hat geholfen, so geht es.

Hallo Ralf,

und was ist da jetzt der Unterschied?
Gruppieren und GroupName vergeben ist doch dasselbe.

Und die zweite Variante (in Userforms) ist die Einbindung in verschiedene Frames. :-)

Gruß Uwe
to top
#7
Hallo Uwe,

... ist es wohl nicht, probiers mal aus.

Hallo Ralf,

in Excel geht das Erzeugen von OptionButtons und Zuweisen von Eigenschaften im Prinzip so. Manche Eigenschaften des OptionButtons kannst Du im ersten WITH setzen - z.B. LinkedCell. Andere wiederum musst Du im zweiten WITH .OBJECT setzen, musst Du mal ausprobieren - mach ich auch nicht anders ;-)

Alternativ wäre die Klassenprogrammierung möglich bzw. nötig, wenn Du z.B. code zuweisen willst.

Code:
Option Explicit
'Variablendeklaration
'Integer fuer alle mit i beginnenden Variablen
DefInt I

Sub Makro1()
'Variablendeklarationen - Typ Integer ueber DefInt
Dim iCnt1, iCnt2, iCnt3
'Schleife 6 mal durchlaufen
For iCnt1 = 1 To 6
  'Multiplikator fuer Left und Zeilennummer, Gruppenname
  iCnt2 = Int((iCnt1 - 1) / 3) + 1
  'oButtonbeschriftung
  iCnt3 = (iCnt1 + 2) Mod 3
  'oButton erzeugen, Positionieren anhand Variablen und Zellposition, feste Breite und Hoehe anhand positionierter Zelle
  With ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _
      DisplayAsIcon:=False, Left:=Cells(iCnt2, 5).Left + iCnt3 * 30, Top:=Cells(iCnt2, 5).Top, Width:=30, Height:= _
      Cells(iCnt2, 5).Height)
    'Verknuepfung
    .LinkedCell = "Tabelle1!" & Cells(iCnt2, iCnt3 + 1).Address
    'mit dem (erzeugten) Objekt
    With .Object
      'Beschriftung
      .Caption = Format(iCnt3, "0#")
      'Gruppenname
      .GroupName = "Tabelle1_" & Format(iCnt2, "0#")
    'Ende mit dem (erzeugten) Objekt
    End With
  'Ende oButton erzeugen, ...
  End With
  'Ende Schleife 6 mal durchlaufen
Next
End Sub
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
[-] Folgende(r) 1 Benutzer sagt Danke an schauan für diesen Beitrag:
Rabe
to top
#8
Hi André,

(29.06.2014, 05:35)schauan schrieb: in Excel geht das Erzeugen von OptionButtons und Zuweisen von Eigenschaften im Prinzip so. Manche Eigenschaften des OptionButtons kannst Du im ersten WITH setzen - z.B. LinkedCell. Andere wiederum musst Du im zweiten WITH .OBJECT setzen, musst Du mal ausprobieren - mach ich auch nicht anders ;-)

danke.
Ich habe mir nun das Makro so angepaßt, daß es mir in 100 Zeilen nach Inhalt in Spalte B sucht und dort dann die 3 Buttons in Spalte C einfügt.

Option Explicit
'Variablendeklaration
'Integer fuer alle mit i beginnenden Variablen
DefInt I

Sub oButtons_einfügen()
    'Variablendeklarationen - Typ Integer ueber DefInt
    Dim iCnt1, iCnt2, iCnt3, iZeile, iStart
   
    'Setzen Startzeile
    iStart = 6
   
    'Löschen aller Buttons
    For iZeile = iStart To iStart + 100
         ActiveSheet.OLEObjects.Delete
    Next iZeile
    '    MsgBox ("alle gelöscht")
   
    'Schleife für 100 Zeilen
    For iZeile = iStart To iStart + 100
         'Falls in Spalte B etwas steht
         If Range("B" & iZeile) <> "" Then
              'Schleife 6 mal durchlaufen, das bedeutet 6 Buttons (= 2x 3)
              For iCnt1 = 1 To 3          'geändert auf 3 Buttons
                   'Multiplikator fuer Left und Zeilennummer, Gruppenname
                   iCnt2 = Int((iCnt1 - 1) / 3) + 1
                   'oButtonbeschriftung
                   iCnt3 = (iCnt1 + 2) Mod 3
                   
                   'oButton erzeugen, Positionieren anhand Variablen und Zellposition, feste Breite und Hoehe anhand positionierter Zelle
                   With ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _
                       DisplayAsIcon:=False, Left:=Cells(iZeile, 3).Left + iCnt3 * 30, _
                       Top:=Cells(iZeile, 3).Top, Width:=30, Height:=Cells(iZeile, 3).Height)
                        'Verknuepfung
                        '.LinkedCell = "Tabelle1!" & Cells(iCnt2, iCnt3 + 1).Address
                       
                        'mit dem (erzeugten) Objekt
                        With .Object
                             'Beschriftung
                             .Caption = ""               'Format(iCnt3, "0#")
                             'Gruppenname
                             .GroupName = ActiveSheet.Name & "_" & Format(iZeile, "0#")    ' "Tabelle1_" & Format(iZeile, "0#")
                             'Ende mit dem (erzeugten) Objekt
                        End With
                       
                        'Ende oButton erzeugen, ...
                   End With
                   
                   'Ende Schleife 6 mal durchlaufen
              Next iCnt1
             
              'Ende Prüfung Inhalt Spalte B
         End If
         
         'Ende Schleife 100 Zeilen
    Next iZeile
   
End Sub



Wie ist es möglich, die drei Buttons nicht in Spalte C, sondern je einen in C, D und E einzufügen?
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#9
Hallo Ralf,

jetzt wird die linke Position so gesetzt:

Code:
Left:=Cells(iZeile, 3).Left + iCnt3 * 30,

Die 3 steht für Spalte C, und mit iCnt3 berechne ich einen Versatz. iCnt3 ist beim ersten Durchlauf 0, dann 1, dann 2 In der nächsten Zeile geht's wieder mit 0 los.

Wenn Du die Buttons in 3 Spalten willst, dann addiere iCnt zur Spaltenzahl und nim dafür den Versatz weg - also

Code:
Left:=Cells(iZeile, 3 + iCnt3).Left
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
[-] Folgende(r) 1 Benutzer sagt Danke an schauan für diesen Beitrag:
Rabe
to top
#10
Hi André,

(29.06.2014, 13:01)schauan schrieb: Wenn Du die Buttons in 3 Spalten willst, dann addiere iCnt zur Spaltenzahl und nim dafür den Versatz weg - also

Code:
Left:=Cells(iZeile, 3 + iCnt3).Left

schön, so habe ich es nun geändert und dabei auch gleich ein ungefähres Zentrieren der Buttons in der Spalte realisiert:

                    With ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _
                        DisplayAsIcon:=False, Left:=Cells(iZeile, 3 + iCnt3).Left + Cells(iZeile, 3 + iCnt3).Width / 3, _
                        Top:=Cells(iZeile, 3).Top + 2, Width:=10, Height:=10)
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Zeilen aus einer Tabelle per Zufall auswählen und markieren Jordan 4 99 14.11.2016, 19:46
Letzter Beitrag: Jordan
  VBA - In Excel Outlook-Kategorien auswählen paulalbert 4 160 08.10.2016, 07:30
Letzter Beitrag: schauan
  Tabelle oder Bereich über "Name" auswählen und anzeigen lassen Bernilli 7 212 30.09.2016, 12:17
Letzter Beitrag: Ego
  Formular auf neuer druckseite übernehmen poligo 12 300 21.09.2016, 10:27
Letzter Beitrag: IchBinIch
  Letzte Leere Zelle Auswählen und Wert eintragen (VBA) e2Ki 7 345 14.09.2016, 09:49
Letzter Beitrag: e2Ki
  Tabs der Tabellenblätter automatisch auswählen Hansi2009 2 183 28.08.2016, 10:07
Letzter Beitrag: Hansi2009
  Ordner auswählen & eintragen in Makro mittels VBA tobisw 15 913 05.08.2016, 18:59
Letzter Beitrag: tobisw
  Vba - passende Zellen auswählen sarkami 4 198 28.07.2016, 17:59
Letzter Beitrag: RPP63
  Formular erstellen durch 2 Reiter mkiupel 1 172 12.07.2016, 04:30
Letzter Beitrag: WillWissen
  Überordner auswählen per VBA Daniel.Haering 5 357 08.06.2016, 15:29
Letzter Beitrag: Daniel.Haering

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste