Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel vba Nochmal Commandbutton platzieren
#1
Hallo liebes Forum,

Klaus-Dieter hatte mir ja bereits eine Antwort gegeben wie man Buttons per vba in einer Userform platziert.
Jetzt möchte ich aber die Buttons nicht direkt platzieren, sondern in einer Userform soll ein Frame erstellt werden und die Buttons sollen innerhalb des Frames platziert sein.
Soweit so gut. Leider schaffe ich es nicht die Buttons mit der "Top-Eigenschaft" an den oberen Rand des Frames zu platzieren.

So funktioniert das Platzieren der Buttons wenn ich es direkt in der Userform haben möchte:
Code:
  B_Height = 20
  B_Left1 = 10
  B_Left2 = 130
  B_Top = 30
  B_Width = 80
 
  'Linke Button-Spalte initialisieren
  For intAnz = 1 To letzte_zeileB
     Wert = Worksheets("Definitionen").Cells(intAnz, colB).Interior.Color
     VarDat = Worksheets("Definitionen").Cells(intAnz, colB).Value
     On Error Resume Next
     Rot = Wert Mod 256
     Wert = (Wert - Rot) / 256
     Grün = Wert Mod 256
     Wert = (Wert - Grün) / 256
     Blau = Wert Mod 256
     
      With Controls("CommandButton" & intAnz)
        .BackColor = RGB(Rot, Grün, Blau)
        .Caption = VarDat '& intAnz
        .Height = B_Height
        .Left = B_Left1
        .Top = B_Top + intAnz * B_Top
        .Width = B_Width
     End With
  Next intAnz

... und so habe ich es mit einem zusätzlichen Frame probiert.... aber leider bekomme ich die Buttons innerhalb des Frames nicht an den oberen Rand platziert:

Code:
  B_Height = 20
  B_Left1 = 10
  B_Left2 = 130
  B_Top = 30
  B_Width = 80
 
  'Linke Button-Spalte initialisieren
  For intAnz = 1 To letzte_zeileB
     Wert = Worksheets("Definitionen").Cells(intAnz, colB).Interior.Color
     VarDat = Worksheets("Definitionen").Cells(intAnz, colB).Value
     On Error Resume Next
     Rot = Wert Mod 256
     Wert = (Wert - Rot) / 256
     Grün = Wert Mod 256
     Wert = (Wert - Grün) / 256
     Blau = Wert Mod 256
   
    'Hier kommt das Frame ins Spiel 
    With Controls("Frame1")
     .Top = 40
     .Height = 350
 
     With Controls("CommandButton" & intAnz)
        .BackColor = RGB(Rot, Grün, Blau)
        .Caption = VarDat '& intAnz
        .Height = B_Height
        .Left = B_Left1
        .Top = B_Top + intAnz * B_Top
        .Width = B_Width
     End With
  End With
  Next intAnz

Vielleicht kann mir jemand einen Tipp geben wie ich auch innerhalb des Frames die Position der Buttons verschieben kann.

Vielen Dank schon mal!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#2
Hallo Erich,
B_Top = 0
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • sharky51
Antworten Top
#3
Hallo Uwe,

wenn ich B_Top = 0 wähle schiebt es mir alle 10 Buttons innerhalb des Frames nach oben und ich sehe richtigerweise nur den letzten (also den untersten) Button am oberen Rand des Frames hängen.
Es sollen aber alle 10 Buttons untereinander in gleichem Abstand beginnend von oben platziert werden. Der obere Abstand zum ersten Button sollte natürlich einstellbar sein.

Hoffe ich habe das nicht zu umständlich beschrieben.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#4
Hallo Erich,

dann nimm eine Zahl größer als Null.

Gruß Uwe
Antworten Top
#5
Hallo Uwe,

das habe ich alles schon probiert - ohne Erfolg.
Das interessante dabei ist, wenn ich mit den Zahlen variiere, dann schieben sich die Buttons zusammen oder auseinander.
Die Top-Position generiere ich ja  so: .Top = B_Top + intAnz * B_Top (wobei intAnz die Anzahl der Buttons ist)
Ich bekomme es einfach nicht hin, dass die Buttons zueinander den gleichen Abstand behalten, sich aber als Gesamtgruppe nach oben verschieben lassen.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#6
Hallo Erich,

Deine ursprüngliche Frage ist beantwortet.
Für die vertikale Anordnung der Buttons zueinander sollte auf jeden Fall die Buttonhöhe in die Berechnung mit einfließen. Wink

Gruß Uwe
Antworten Top
#7
Hallo Erich,

Zitat:Ich bekomme es einfach nicht hin, dass die Buttons zueinander den gleichen Abstand behalten, sich aber als Gesamtgruppe nach oben verschieben lassen.

wenn Du jeden Button einzeln bearbeitest, dann kannst Du nach Verschieben an die für Dich richtige Stelle
für jeden einzelnen Button im Ereignisfenster die aktuellen Werte auslesen. Wenn Du diese Werte dann in den
Code schreibst, werden sie dauerhaft angewendet werden.
Ich denke, daß damit Dein Problem gelöst ist.
Du bekommst dann feste Werte in Deinen Code. Das Verschieben der Gesamtgruppe wird aber auch weiterhin
nicht möglich sein, da die Einstellungen ja als Festwerte im Code abgelegt worden sind.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#8
Hallo Peter,

(19.12.2019, 13:54)Käpt\n Blaubär schrieb: Das Verschieben der Gesamtgruppe wird aber auch weiterhin nicht möglich sein.

sollte auch gehen, wenn man die Buttons gruppiert.

Gruß Uwe
Antworten Top
#9
Uwe, Peter,

erstmal vielen Dank für die Rückmeldungen.

Ich verstehe zwar nicht warum ich die Buttons ohne den Frame, also direkt in der Userform, sauber in der Schleife anordnen kann, in dem Frame aber nicht?

Werde mal versuchen mit Euren Tipps weiter zu kommen.

Gruss Erich

--- snip --- habe es gelöst!
Nicht elegant - aber es funktioniert!

Code:
  B_Height = 20
  B_Left1 = 10
  B_Left2 = 130
  B_Top = 10
  offsetB_Top = 25
  B_Width = 80
 
  'Linke Button-Spalte initialisieren
  For intAnz = 1 To letzte_zeileB
     Wert = Worksheets("Definitionen").Cells(intAnz, colB).Interior.Color
     VarDat = Worksheets("Definitionen").Cells(intAnz, colB).Value
     On Error Resume Next
     Rot = Wert Mod 256
     Wert = (Wert - Rot) / 256
     Grün = Wert Mod 256
     Wert = (Wert - Grün) / 256
     Blau = Wert Mod 256
     
     With Controls("Frame1")
        .Top = 40
        .Height = 260
        With Controls("CommandButton" & intAnz)
           .BackColor = RGB(Rot, Grün, Blau)
           .Caption = VarDat
           .Height = B_Height
           .Left = B_Left1

           '--Button Anordnung ------------------
           If intAnz = 1 Then
              .Top = B_Top
           ElseIf intAnz > 1 Then
              .Top = B_Top + offsetB_Top
              B_Top = B_Top + offsetB_Top
           End If
           '-----------------------------------------

           .Width = B_Width
        End With
     End With
  Next intAnz
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#10
(19.12.2019, 14:34)sharky51 schrieb: Ich verstehe zwar nicht warum ich die Buttons ohne den Frame, also direkt in der Userform, sauber in der Schleife anordnen kann, in dem Frame aber nicht?

behauptet wer?

Gruß Uwe
Antworten Top


Gehe zu:


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