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.

Das Forum wird am Sonntag, dem 28.07. zwischen 6:30 Uhr und 8:30 Uhr wegen eines Updates vorübergehend geschlossen. x


VBA: Schaltflächen im Sheet via VBA dimensionieren
#1
Hallo Ihr Wissenden,

folgende Situation
  • in einer Mappe habe ich auf diversen Blättern jeweils Schaltflächen, die Makros auslösen
  • wenn das/die Makro/s abläuft/ablaufen, verändern sich (ohne, dass ich das will!) die Schaltflächen
    • sie werden größer oder kleiner
    • sie werden breiter oder schmaler
    • die Schriftarten der Flächen werden größer oder unleserlich klein
Schon früher erfuhr ich, dass das bei VBA-Makros passieren könne. Pragmatischerweise wollte ich nun einfach im Makro dafür sorgen, dass den Schaltflächen ihre Dimensionen einfach immer wieder zugewiesen werden. Dazu wollte ich bei Aktivierung eines Blattes den aktuellen (Ausgangs-)Zustand auslesen und abspeichern und im Makro dann immer wieder den Schaltflächen die gespeicherten Eigenschaften neu zuweisen.
Damit ergibt sich für mich das Problem, dass ich die Schaltflächen ansprechen muss. Zunächst habe ich mir mal einen benutzerdefinierten Typ 'ButtonDim' erstellt, in dem ich sowas wie Höhe, Breite, Font-Name, etc. speichern kann. Nun:
  • dimensioniere ich die Flächen als 'CommandButton' (will heißen, ich erstelle jeweils eine Objektvariable dieses Typs, der ich nacheinander die div. Buttons zuweise) dann
    • werden mir von Intellisync verschiedene Eigenschaften wie z.B. 'width' und 'height' nicht angeboten
    • aber ich kann sie auslesen (und die jeweiligen Werte speichern)
    • wenn ich später der Fläche wieder genau diese Werte zuweise, erscheint diese aber erheblich kleiner
  • dimensioniere ich die Flächen dagegen als 'Shapes("[Name der Fläche]")', dann
    • weiß ich nicht so genau, wie ich den Font-Namen und ~größe auslese
    • bzw. wieder zuweise
Warum dieses Verhalten, wie kann ich das sinnvoll lösen (und wie kann ich dieses 'eigenmächtige' Verhalten von VBA in der Veränderung der Schaltflächen vielleicht generell verhindern)

Danke für Eure Hinweise,
RaiSta
 Man(n) ist nie zu alt für die Erkenntnis, dass das bisher Gelernte doch nur bedingt gültig oder auch nur brauchbar ist. 27
Antworten Top
#2
Hallo,
warum das so passiert, weiß vielleicht der Geier, ich nicht.
In einem Projekt hatte ich das gtleiche Problem, die Buttons wurden immer kleiner.
Die je Blatt von 1 bis x durchnummerierten Buttons wurden in der Schleife
Code:
    Namen = [{"Geschäftsdatenbank", 0; "Kundendatenbank", 13;"Kasse",19;"Anbieter-Abrechnung",25;"Mitarbeiter",28;"Mitarbeiter-Abrechnung",32}]
  For Each sh In ThisWorkbook.Sheets
    For i = 1 To 6
      If sh.Name = Namen(i, 1) Then
        For Each but In sh.Shapes
          If Left(but.Name, 7) = "Command" Then
            k = Val(Mid(but.Name, 14)) + Namen(i, 2)
            but.Top = Daten(k, 1)
            but.Left = Daten(k, 2)
            but.Height = Daten(k, 3)
            but.Width = Daten(k, 4)
          End If
        Next but
      End If
    Next i
  Next sh
wiederr auf ihr Normalmaß gesetzt. Im Feld Namen waren die Namen der Sheets und ein Korrekturglied, um aus der Buttonnummer das richtige Daten-Element zu finden. Daten enthielt die richtigen Top...Width-Werte der Buttons.
Es funktionierte, ausgeführt habe ich es in Workbook_Open und bei Worksheet_Activate.
Die Variable but hat auch Eigenschaften but.DrawingObject.Object.Font oder ...FontSize.
Gruß der AlteDresdner (Win11, Off2021)
[-] Folgende(r) 1 Nutzer sagt Danke an AlterDresdner für diesen Beitrag:
  • RaiSta
Antworten Top
#3
Moinsen,

über die .OLEFormat.Object-Eigenschaft kannst du auf das Control- Objekt zugreifen. Wenn du aber zufällig nur das Click-Event benutzt, kannst du auch darüber nachdenken auf Shapeobjekte als Klickempfänger zurückzugreifen. Oder du verwendest Zellobjekte als Steuerelement.

Viele Grüße
derHöpp
Antworten Top


Gehe zu:


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