Microsoft Excel

Herbers Excel/VBA-Archiv

Makro - VBA Formularsteuerelem. zentr. ausrichten

Betrifft: Makro - VBA Formularsteuerelem. zentr. ausrichten von: Karl
Geschrieben am: 03.11.2014 07:09:56

Hallo Leute!

Franz hat mir vor einigen Monaten eine Beispiel für mein damaliges Problem gesendet ,doch leider bin ich nicht fähig es umzusetzen da fehlt mir die Erfahrung mit VBA und Makros.
Kann mich da jemand untertützen und seine VBA? - Makro? in die Musterdatei einarbeiten?
Würde für die Zukunft gerne wissen wie so etwas geht.

DANKE Karl
https://www.herber.de/bbs/user/93498.xls

Nachfolgend ein Beispiel. Das Kontrollkästchen wird neu Positioniert, wenn man das Tabellenblatt aktiviert oder wenn man in eine Zelle in der Zeile mit dem Kontrollkästchen klickt.
Den namen des Kontrollkästchens musst du ggf. noch anpassen.

Gruß
Franz

Private Sub PositionShapes()
    'in nachfolgender Zeile ggf. Sub "PositionShape_in_Zelle" verwenden
    Call PositionShape_Centered_in_Cell(objShape:=Me.Shapes("Kontrollkästchen 1"))
End Sub

Private Sub PositionShape_Centered_in_Cell(objShape As Shape)
    'Zentriert das Shape innerhalb der Zelle ohne Veränderung der Größe
    Dim Zelle As Range
    Set Zelle = objShape.TopLeftCell
    With objShape
      .Top = Zelle.Top + (Zelle.Height - .Height) / 2
      .Left = Zelle.Left + (Zelle.Width - .Width) / 2
    End With
End Sub

Private Sub PositionShape_in_Zelle(objShape As Shape)
    'vergrößert das Shape-Objekt auf Zellengröße
    Dim Zelle As Range
    Set Zelle = objShape.TopLeftCell
    With objShape
      .Top = Zelle.Top
      .Left = Zelle.Left
      .Width = Zelle.Width
      .Height = Zelle.Height
    End With
End Sub

Private Sub Worksheet_Activate()
    Application.EnableEvents = False
    Call PositionShapes
    Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Select Case Target.Row
    Case Me.Shapes("Kontrollkästchen 1").TopLeftCell.Row
      Call PositionShapes
    Case Else
      'do nothing
  End Select


  

Betrifft: AW: Makro - VBA Formularsteuerelem. zentr. ausrichten von: fcs
Geschrieben am: 03.11.2014 07:35:10

Hallo Karl,

mein Makro ist zugeschnitten auf die Positionierung eines Kontrollkästchens.
Eine Erweiterung auf mehrere Kontrollkästchen ist grundsätzlich möglich, ist aber nur zweckmäßig bei wenigen Kontrollkästchen.

Es macht aber wenig/keinen Sinn, eine lange Liste mit Kontrollkästchen zuzupflastern und deren Position dann ggf. per Makro zu verwalten.
Hier ist es zweckmäßiger einfach in den Zellen ein "X" oder anderes Zeichen einzutragen. Dies kann man z.B. auch per Maus-Doppelklick steuern.

Gruß
Franz


  

Betrifft: AW: Makro - VBA Formularsteuerelem. zentr. ausrichten von: Karl
Geschrieben am: 03.11.2014 08:11:32

Hallo Franz,
jetzt steh ich total auf der Leitung!
Könntest du mir bitte das in meiner Musterdatei erklären.

Danke
Karl




  

Betrifft: AW: Makro - VBA Formularsteuerelem. zentr. ausrichten von: fcs
Geschrieben am: 03.11.2014 10:10:47

Hallo Karl,

der Code in deiner Frage muss im VBA-Editor unter dem Code-Modul des Blattes "Muster" eingefügt werden.

Das folgende Makro reagiert auf die Selektion von Zellen. Stimmt die Zeile einer selektierten Zelle mit der Zeile der Zelle unter der linken-oberen Ecke eines der Kontrollkästen in der Case-Zeile überein, wird das Positionier-Makro gestartet. Für mehr als eine Checkbox muss die Case-Zeile entsprechend erweitert werden.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Select Case Target.Row
    Case Me.Shapes("Kontrollkästchen 1").TopLeftCell.Row, _
        Me.Shapes("Kontrollkästchen 2").TopLeftCell.Row, _
        Me.Shapes("Kontrollkästchen 3").TopLeftCell.Row, _
        Me.Shapes("Kontrollkästchen 4").TopLeftCell.Row
      Call PositionShapes
    Case Else
      'do nothing
  End Select
End Sub

Das folgende Makro positioniert die Checkboxen. Hier muss für jedes Steuerelement eine entsprechende Call-Zeile vorhanden sein
Private Sub PositionShapes()
    'in nachfolgender Zeile ggf. Sub "PositionShape_in_Zelle" verwenden
    Call PositionShape_Centered_in_Cell(objShape:=Me.Shapes("Kontrollkästchen 1"))
    Call PositionShape_Centered_in_Cell(objShape:=Me.Shapes("Kontrollkästchen 2"))
    Call PositionShape_Centered_in_Cell(objShape:=Me.Shapes("Kontrollkästchen 3"))
    Call PositionShape_Centered_in_Cell(objShape:=Me.Shapes("Kontrollkästchen 4"))
End Sub

Für jedes weiter Steuerelement müssen entsprechend Zeilen ergänzt werden.

Damit die Positionierung der Checkboxen korrekt funktioniert muss die Höhe der Zeilen größer als die Höhe der Checkboxen sein!!

Wenn in vielen Zeilen eine Markierung gesetzt werden soll, dann sollte eines der beiden folgenden Ereignis-Makros verwendet werden. Die einzutragenden Inhalte/Spalten/Zeilen kann man natürlich beliebig anpassen.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  'Markieren der Zellen in Spalte E per Linke-Maustaste-Doppelklick
  Select Case Target.Column
    Case 4
      Select Case Target.Row
        Case Is >= 3
          If Target.Value = "X" Then
            Target.ClearContents
      '      Target.Value = "O"
          Else
            Target.Value = "X"
          End If
          Cancel = True
        Case Else
          'do nothing
      End Select
    Case Else
      'do nothing
  End Select
End Sub


Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  'Markieren der Zellen in Spalte E per Rechte-Maustaste-Klick
  If Target.Cells.Count = 1 Then
  Select Case Target.Column
    Case 4
      Select Case Target.Row
        Case Is >= 3
          If Target.Value = "X" Then
            Target.ClearContents
      '      Target.Value = "O"
          Else
            Target.Value = "X"
          End If
          Cancel = True
        Case Else
          'do nothing
      End Select
    Case Else
      'do nothing
  End Select
  End If
End Sub

Gruß
Franz


  

Betrifft: AW: Makro - VBA Formularsteuerelem. zentr. ausrichten von: Karl
Geschrieben am: 03.11.2014 10:50:37

Hallo Franz,
danke für deine Bemühungen , entschuldige es tut mir leid ich bring das nich in meine Datei bin zu blöd dafür.
Könntes du mir das in meine Musterdatei einbauen damit ich einigermaßen nachvollziehen kann was dabei passiert.
Du kannst jetzt drüber lachen aber es gibt noch eine Generation die mit Englisch nichts am Hut hat,
meiner einer gehört dazu.
Aus diesem Grund muß ich mir solche Lösungen holprig erarbeiten.

Danke Karl


  

Betrifft: AW: Makro - VBA Formularsteuerelem. zentr. ausrichten von: fcs
Geschrieben am: 03.11.2014 11:41:09

Hallo Karl,

wenn du deine Dateien mit VBA-Funktionen anreichern willst, dann kommst du nicht drum herum dich mit den englischen VBA-Befehlen herumzuschlagen. Zum Glück (wenn du ein deutsches Excel hast) ist wenigstens die zugehörige Hilfe in deutsch.
https://www.herber.de/bbs/user/93501.xls

Hoffe du kommst damit weiter.

Gruß
Franz


  

Betrifft: AW: Makro - VBA Formularsteuerelem. zentr. ausrichten von: Karl
Geschrieben am: 03.11.2014 12:16:07

Danke Franz,
das ist super, jetzt kann wenn ich es mir das VBA übersetze so einigermaßen vorstellen und nachvollziehen was da passiert.
Das schwierige ist immer wie und wo baue ich die VBA Funktion ein.
Vielleicht finde ich mal wen der mir die grundlegenden Dinge erklärt. Diverseste VBA und Makros
findest du ja im Internet genug aber wie man diese Anwendet sollte man halt auch wissen.
Du hast mir auf jeden Fall sehr geholfen.
DANK noch dafür
Karl


 

Beiträge aus den Excel-Beispielen zum Thema "Makro - VBA Formularsteuerelem. zentr. ausrichten"