Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema OptionButton
BildScreenshot zu OptionButton OptionButton-Seite mit Beispielarbeitsmappe aufrufen

OptionButton per Makro ...erstellen


Betrifft: OptionButton per Makro ...erstellen von: kurt pa
Geschrieben am: 09.09.2017 12:36:57

Hallo,

gibt es ein Makro mit dem man 2 OptionButton nebeneinander und 20 nach unten
erstellen kann ?
Links 1 Rechts 2
Links 3 Rechts 4
Die Abhängigkeit aber immer 1 mit 2, 3 mit 4 u.s.w.

gruß
kurt pa

  

Betrifft: AW: OptionButton per Makro ...erstellen von: Nepumuk
Geschrieben am: 09.09.2017 14:18:05

Hallo Kurt,

in einer Tabelle oder auf einem Userform?

Gruß
Nepumuk


  

Betrifft: AW: OptionButton per Makro ...erstellen von: Kurt pa
Geschrieben am: 09.09.2017 18:03:22

Hallo Nepumuk,
Auf einer Tabelle .
Gruß
Kurt pa


  

Betrifft: AW: OptionButton per Makro ...erstellen von: Nepumuk
Geschrieben am: 09.09.2017 18:21:43

Hallo Kurt,

ich hab dir mal eine Beispielmappe gemacht: https://www.herber.de/bbs/user/116141.xlsm

Gruß
Nepumuk


  

Betrifft: Das ist ja ein super Beispiel von: kurt pa
Geschrieben am: 09.09.2017 18:42:57

Hallo Nepumuk,
danke ein tolles Beispiel.
Ich möchte ohne Beschriftung und wie kann ich die Position verändern.
Zum Beispiel Plazierung von D20 bis D40 und die 2. Reihe daneben.
Würde mich freuen wenn Du mir das Schreiben würdest.

gruß
kurt pa


  

Betrifft: AW: Das ist ja ein super Beispiel von: Daniel
Geschrieben am: 09.09.2017 18:54:51

Hi

hier mal der Code angepasst und etwas übersichtlicher.
die Optionbuttons passe ich genau an die Zellen an, in die sie geschrieben werden (breite, höhe, Position)

zusätzlich gebe ich diese Zelle als Ausgabezelle für den Optionbutton an, denn wahrscheinlich willst du die Eingabe ja irgendwann mal auswerten oder sonst wie weiterverarbeiten und das geht einfacher, wenn der Optionbuttonwert in einer Zelle steht.
Außerdem kannst du dann die eingabe schnell und einfach zurücksetzen, indem du in alle Ausgabezellen den Wert FALSCH schreibst.

Sub Makro1()

Dim z As Long
Dim s As Long
Dim OB As Object


With Range("D20")

For z = 1 To 20
    For s = 1 To 2
        With .Offset(z - 1, s - 1)
        Set OB = ActiveSheet.OLEObjects.Add( _
            ClassType:="Forms.OptionButton.1", _
            Link:=False, _
            DisplayAsIcon:=False, _
            Left:=.Left, _
            Top:=.Top, _
            Width:=.Width, _
            Height:=.Height)
            
        OB.Object.GroupName = "Gruppe" & z
        OB.LinkedCell = .Address(0, 0)
        OB.Object.Caption = ""
        .Value = False
        End With
    Next
Next
 
End With
End Sub
Gruß Daniel


  

Betrifft: Daniel dein Beispiel auch i.o. aber von: kurt pa
Geschrieben am: 09.09.2017 19:00:26

Hallo Daniel,
dein Beispiel ist auch super aber ich kann auch diese nicht löschen !
Wenn ich diese woanders plazieren möchte.
Wie kann ich die Breite einstellen und den abstand undtereinander und nebeneinander ?

gruß
kurt pa


  

Betrifft: AW: Daniel dein Beispiel auch i.o. aber von: Daniel
Geschrieben am: 09.09.2017 19:41:28

Hi

meine Optionbuttons sind ActiveX-Steuerelemente.
Wenn du an diesen Nachträglich was ändern oder löschen willst, musst du erst in den Entwurfsmodus wechseln. Der Button dazu ist in der Menüleiste "Entwicklertools" und dort eigentlich nicht zu übersehen.

die Breite der Optionbutton legst du dort fest, wo "Width:=" steht.
momentan mache ich den Optionbutton so breit wie die Zelle in der ich die den Button platziere.
Wenn du dort eine eine andere Breite haben willst, dann schreibe dort einfach die gewünschte Breite rein, für die Höhe das gleiche:

Width:=20, _
height:=15, _
die Postion wird in den Eigenschaften Top:= (y-Achse, Zeilenposition) und Left:= (x-Achse, Spaltenposition)

Position des ersten Optionbuttons wird hier beschrieben:
With Range("D20")
wenn du zwischen den Optionbuttons immer eine Zelle Abstand haben willst, dann hier (für mehr Abstand):
With .Offset((z - 1) * 2, (s - 1) * 2)
wenn der Abstand unabhängig von Zellen sein soll, dann kannst du die Postion (Top, Left) auch direkt berechnen:
Left:=100 + (s - 1) *30, _
Top:=100 + (z - 1) * 20, _ 

allerdings musst du dir dann ggf gedanken machen, wo die Ausgabezellen haben willst.

du kannst auch beides kombinieren und die Optionbuttons zwar an der Zelle orientiert plazieren, aber verschieben:
Left:=.Left + 10, _
Top:=.Topo + 1, _ 
Wenn du keine Ausgabezellen brauchst, dann lösche diese Zeile:
OB.LinkedCell = .Address(0, 0)
Gruß Daniel


  

Betrifft: Hier mein größen Wunsch von: kurt pa
Geschrieben am: 09.09.2017 19:10:50

Hallo Daniel,
die Größe 0,62 x0,44
Abstand zwischen beiden Reihen 0,7cm

gruß
kurt pa


  

Betrifft: AW: Das ist ja ein super Beispiel von: Nepumuk
Geschrieben am: 09.09.2017 18:58:35

Hallo Kurt,

über die Left- und Top-Eigenschaft kannst du die Position der Buttons in der Tabelle steuern:

Left:=.Cells(lngIndex, 1).Left, Top:=.Cells(lngIndex, 1).Top

Die Beschriftung bekommst du über die Caption-Eigenschaft. Wenn du keinen Text haben willst, dann musst du die Caption-Eigenschaft auf Leer setzen:

objOLEObject.Object.Caption = vbNullString

Gruß
Nepumuk


  

Betrifft: Nepumuk danke !!! von: kurt pa
Geschrieben am: 09.09.2017 19:11:16




  

Betrifft: AW: Nepumuk danke !!! von: Hajo_Zi
Geschrieben am: 09.09.2017 19:19:51

warum offen?

GrußformelHomepage

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.

Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung. o.w.T."

Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.


  

Betrifft: darum von:  
Geschrieben am: 09.09.2017 19:31:39

damit Du durch solche Beiträge Deine Beitragszahl erhöhen kannst!


  

Betrifft: AW: darum, Info an Daniel um 19:10 uhr von: Kurt pa
Geschrieben am: 09.09.2017 20:18:10




  

Betrifft: AW: darum, Info an Daniel um 19:10 uhr von: Daniel
Geschrieben am: 09.09.2017 20:32:54

Hi
wie du die Positionen unabhängig von den Zellen berechnen kannst, habe ich dir doch gezeigt.
das ist ja einfache Mathematik.
Welche Werte du konkret einsetzen musst, kannst du dir doch selber ausrechen.
mach einfach mal einen Probeausdruck und miss nach, was du bekommst.
dann kannst ja über den Dreisatz leicht ausrechnen, was du einestzen musst, um deine gewünschten Abstände und Breiten zu bekommen (wenn du bspw With:=100 hast und dein Optionbutton ist nur halb so breit wie gewünscht, dann solltest du es dem Doppelten, also 200 probieren)

oder du nutzt die Funktion Application.InchesToPoints:

Width:=Application.InchesToPoints(Breite in mm / Breite eines Inches(Zoll) in mm)
für die anderen Werte dann analog.

Gruß Daniel


  

Betrifft: Danke Daniel und schönes Wochenende -) von: Kurt pa
Geschrieben am: 09.09.2017 21:05:07




  

Betrifft: Es klappt leider nicht ! von: kurt pa
Geschrieben am: 10.09.2017 10:52:32

Guten Morgen,
ich habe es mehrfach probiert, klappt nicht.
In der Zelle "D10" habe ich die beiden OptionButton positioniert,
so sollte es aussehen.

Würde mich freuen wenn jemand (Daniel,Nepumuk) für mich schaffen würde.
Habe Musterdatei.
https://www.herber.de/bbs/user/116143.xlsm
gruß
kurt pa


  

Betrifft: AW: Es klappt leider nicht ! von: Nepumuk
Geschrieben am: 10.09.2017 11:36:12

Hallo Kurt,

teste mal:

Public Sub CreateOptionButtons()
    Dim objOLEObject As OLEObject
    Dim lngIndex As Long
    Application.ScreenUpdating = False
    With ActiveSheet
        For lngIndex = 1 To 20
            Set objOLEObject = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _
                DisplayAsIcon:=False, Left:=.Cells(lngIndex + 9, 4).Left + 20, _
                Top:=.Cells(lngIndex + 9, 4).Top + 4, Width:=9, Height:=9)
            
            objOLEObject.Object.Caption = vbNullString
            objOLEObject.Object.GroupName = CStr(lngIndex)
            
            Set objOLEObject = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _
                DisplayAsIcon:=False, Left:=.Cells(lngIndex + 9, 5).Left + 20, _
                Top:=.Cells(lngIndex + 9, 5).Top + 4, Width:=9, Height:=9)
            
            objOLEObject.Object.Caption = vbNullString
            objOLEObject.Object.GroupName = CStr(lngIndex)
        Next
    End With
    Set objOLEObject = Nothing
    Application.ScreenUpdating = True
End Sub

Gruß
Nepumuk


  

Betrifft: Leider ... von: kurt pa
Geschrieben am: 10.09.2017 14:26:41

Hallo Nepumuk,
die größe ist i.o., aber der Abstand zwischen beiden zu weit auseinander.
Die Reihe fängt bei 20 an, hier bei Zelle 10.
Die Spaltenbreite ist 9 also ein Button ganz links und das Rechte nach
rechts.

gruß
kurt pa


  

Betrifft: Habe es hinbekommen --)) von: kurt pa
Geschrieben am: 10.09.2017 14:59:15

Hallo Nepumuk,
habe es hinbekommen:

Public Sub Neu_CreateOptionButtons()
    Dim objOLEObject As OLEObject
    Dim lngIndex As Long
    Application.ScreenUpdating = False
    
    With ActiveSheet
        For lngIndex = 1 To 20
            Set objOLEObject = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False,  _
_
                DisplayAsIcon:=False, Left:=.Cells(lngIndex + 9, 4).Left + 5, _
                Top:=.Cells(lngIndex + 19, 4).Top + 4, Width:=9, Height:=9)
            
            objOLEObject.Object.Caption = vbNullString
            objOLEObject.Object.GroupName = CStr(lngIndex)
            
            Set objOLEObject = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False,  _
_
                DisplayAsIcon:=False, Left:=.Cells(lngIndex + 9, 4).Left + 40, _
                Top:=.Cells(lngIndex + 19, 4).Top + 4, Width:=9, Height:=9)
            
            objOLEObject.Object.Caption = vbNullString
            objOLEObject.Object.GroupName = CStr(lngIndex)
        Next
    End With
    Set objOLEObject = Nothing
    Application.ScreenUpdating = True
End Sub
einwandfrei !
Danke nochmals und Rest schönen Sonntag,
gruß
kurt pa


Beiträge aus den Excel-Beispielen zum Thema "OptionButton per Makro ...erstellen"