Registriert seit: 10.04.2014
Version(en): 2016 + 365
28.06.2014, 20:29
(Dieser Beitrag wurde zuletzt bearbeitet: 28.06.2014, 20: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, 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.
Registriert seit: 10.04.2014
Version(en): 2016 + 365
28.06.2014, 21:21
(Dieser Beitrag wurde zuletzt bearbeitet: 28.06.2014, 22:28 von Rabe.)
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?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
(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
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, 12:15
(Dieser Beitrag wurde zuletzt bearbeitet: 16.08.2015, 09:51 von Rabe.)
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?
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, 13:20
(Dieser Beitrag wurde zuletzt bearbeitet: 29.06.2014, 13:21 von Rabe.)
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)
|