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!
Top
#2
Hallo Erich,
B_Top = 0
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • sharky51
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.
Top
#4
Hallo Erich,

dann nimm eine Zahl größer als Null.

Gruß Uwe
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.
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
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.
Top
#8
Hallo Peter,

(19.12.2019, 14: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
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
Top
#10
(19.12.2019, 15: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
Top


Gehe zu:


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