Registriert seit: 10.04.2014
Version(en): 2016 + 365
28.06.2014, 21:29
(Dieser Beitrag wurde zuletzt bearbeitet: 28.06.2014, 21:34 von Rabe.)
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?
Registriert seit: 11.04.2014
Version(en): Office 2007
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 10 / Office 2016
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• Rabe
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi Stefan, (28.06.2014, 21: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.
Registriert seit: 10.04.2014
Version(en): 2016 + 365
28.06.2014, 22:21
(Dieser Beitrag wurde zuletzt bearbeitet: 28.06.2014, 23:28 von Rabe.)
Hi André, (28.06.2014, 21: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?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
(28.06.2014, 22:01)Rabe schrieb: Hi Stefan,
(28.06.2014, 21: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
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• Rabe
Registriert seit: 10.04.2014
Version(en): 2016 + 365
29.06.2014, 13:15
(Dieser Beitrag wurde zuletzt bearbeitet: 16.08.2015, 10:51 von Rabe.)
Hi André, (29.06.2014, 06: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?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• Rabe
Registriert seit: 10.04.2014
Version(en): 2016 + 365
29.06.2014, 14:20
(Dieser Beitrag wurde zuletzt bearbeitet: 29.06.2014, 14:21 von Rabe.)
Hi André, (29.06.2014, 14: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)
|