Position von ActiveX Steuerelementen per Makro

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Position von ActiveX Steuerelementen per Makro
von: Christian
Geschrieben am: 12.11.2015 14:14:27

Guten Tag zusammen.
Ich möchte mit dem Wert einer Zelle und Makro die Position einer ActiveX Befehlsschaltfläche verändern.
Habe mir vorgestellt, dsss ich den Zellwert (z.B. 1200) als Variable speichern kann und dann diesen bei der Left Eigenschaft des Steuerelementes einsetzen kann. Quasi analog zur händischen Version: Entwurfsmodus/Eigenschaften, Wert bei Left ändern und Entwurfsmodus wieder ausschalten.
Wenn ich das über den Makrorecorder aufzeichne - was oft der Startpunkt für meine Makros ist - wird nicht viel mitgeschnitten.
Gibts da eine Lösung oder bin ich auf dem Holzweg? Falls es eine gibt, was wäre die Analogie für die Hintergrudfarbe der Befehlsschaltfläche?
besten Dank im Voraus
Christian

Bild

Betrifft: AW: Position von ActiveX Steuerelementen per Makro
von: selli
Geschrieben am: 12.11.2015 14:28:06
hallo christian,
bei den schwammigen vorgaben, kannst du doch auch gleich in der recherche suchen.
da gibt es schon einige beiträge zum thema.
gruß
selli

Bild

Betrifft: AW: Position von ActiveX Steuerelementen per Makro
von: fcs
Geschrieben am: 12.11.2015 15:45:03
Hallo Christian,
OLE-Objecte/Active-X-Objekte positioniert man auf einem Tabellenblatt am Einfachsten relativ zur Left/Top-Position einer Zelle.
Hier eine Datei mit Beispielen zum Formatieren von Active-X-Objekten.
https://www.herber.de/bbs/user/101470.xlsm
Gruß
Franz

Bild

Betrifft: AW: Position von ActiveX Steuerelementen per Makro
von: Christian
Geschrieben am: 12.11.2015 17:27:55
Hallo Franz.
Herzlichen Dank, das hat mich schon einen grossen Schritt weitergebracht.
Nun habe ich noch das Problem, dass das zu verschiebende Steuerelement und und da wo ich die Variabeln definiere (und das Makro starte) nicht auf dem gleichen Tabellenblatt liegen.
Ich hatte gehofft, dass ich zwischendurch einfach das Tabellenblatt wechseln kann(mit den beiden auskommentierte Zeilen) aber das klappt nicht (-> Fehler beim Kompilieren Methode oder Datenobjekt nicht gefunden).
Was mach ich da falsch? Hats vielleicht was mit Me. zu tun?
besten Dank
Christian

Sub Button3Verschieben_()
Dim PositionLeft As Integer
Dim Color As Long
Dim ProductName As String
PositionLeft = Range("L2").Value
Color = Range("L3").Value
ProductName = Range("B1").Value
'Application.Sheets("Cockpit1").Select
With Me.ListPosition3
    .Left = PositionLeft
    .BackColor = Color
    .Caption = ProductName
End With
    
'Sheets("P3").Select
    
End Sub


Bild

Betrifft: AW: Position von ActiveX Steuerelementen per Makro
von: Daniel
Geschrieben am: 12.11.2015 18:00:08
Hi
kommt darauf an, was ME ist
befindet sich der Code im Modul einer Userform, ist ME die Userform
befindet er sich in einem Tabellenblattmodul, ist ME das dazugehörige Tabellenblatt
befindet er sich im Modul "DieseArbeitsmappe" ist ME die Mappe.
das Application davor ist falsch, dass solltest du weglassen.
Eigentlich solltest du die Zeilen mit dem .Select sowieso weglassen, die brauchst du hier eh nicht.
Gruß Daniel

Bild

Betrifft: AW: Position von ActiveX Steuerelementen per Makro
von: fcs
Geschrieben am: 13.11.2015 09:52:38
Hallo Christian,
wenn ein Makro unter einem Tabellenblatt angelegt ist, dann beziehen sich Range, Cells, und andere Objekte immer auf dieses Tabellenblatt unabhängig davon welches Tabellenblatt das aktive Blatt ist.
Aus diesem Dilemma kommt man heraus, indem man für Objekte auf anderen Blättern die Objekt-Referenz vollständig angibt.
Entweder mit
dem Blattnamen (z.B.: Worksheets("TabelelleXYZ"),
dem Codenamen (z.B.: Tabelle1
oder wenn dies passt kann man auch mit ActiveSheet
Innerhalb des Code-Moduls von Objekten (Arbeitsmappe, Tabelle, Userform, Chart) kann man auch mit dem Platzhalter Me arbeiten.
Wie von Daniel erläutert bezieht sich Me immer auf das Objekt unter dem das Makro angelegt ist.
Me erleichtert die Programmierung, weil nach Eingabe des Punktes die untergeordneten Objekte, die Eigenschaften und Methoden aufgelistet werden, wenn die Optionen im VBA-Editor entsprechend eingestellt sind.
Gruß
Franz
Dein Makro beispielhaft angepasst, wobei für mich nicht klar ist wo die Schaltfläche sich befindet.

Sub Button3Verschieben_()
  Dim PositionLeft As Integer
  Dim Color As Long
  Dim ProductName As String
  
  With ActiveWorkbook.Sheets("Cockpit1") 'Name des Tabellenblatts mit den Sollwerten für die  _
Schaltfläche
      PositionLeft = .Range("L2").Value
      Color = .Range("L3").Value
      ProductName = .Range("B1").Value
  End With
  
  With Tabelle1 'Codename des Tabellenblatts nit der Schaltfläche: Tabelle1 (P3)
    'Codename ist der im VBA-Editor im Projekt-Explorer angezeigte Name
'    With .CommandButton1
    With .ListPosition3
        .Left = PositionLeft
        .BackColor = Color
        .Caption = ProductName
    End With
      
    .Activate  'Nicht erforderlich - außer wenn am Ende des Makros ein bestimmtes Blatt  _
angezeigt werdén soll
  End With
    
End Sub


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Position von ActiveX Steuerelementen per Makro"