VisualBasic OLEObject CommandButton .Left ändert sich

D

derBobby

Gast
Hallo zusammen,

Info:
in einer kleinen Bastellei mit Excel 2007 habe ich drei OLEObject CommandButtons, die während der Laufzeit erstellt werden und ihren Code bekommen, wenn ein neues Blatt erzeugt wird. Diese sollen nebeneinander angezeigt werden mit den Funktionen "Blatt zurück", "Blatt vor", "zur Übersicht".

Problem:
Funktioniert alles soweit, bis auf die Positionierung. Der Wert Left lässt sich entweder nicht festlegen, oder er verändert sich, so dass die Anzeige nicht passt. Außerdem verhält er sich irgendwie seltsam.
Beispiel mit gerade erdachten Werten: zwischen 30 und 100 bewegt sich kaum etwas und ab 100 machts dann riesen Sprünge. Sprich: Verhalten scheint irgendwie nicht linear.

right.png - So sollte es sein
wrong.png - So ist es nach Ausführung

Funktion die beim Erstellen eines neuen Blattes aufgerufen wird:
Code:
Private Sub Workbook_NewSheet(ByVal neuesBlatt As Object)

    Dim CB1             As Object
    Dim CB2             As Object
    Dim zielBlatt       As Object
    Dim quellBlatt      As Object
    Dim aktZeile        As Integer

    If neuesBlatt.Type <> xlWorksheet Then Exit Sub

    Set CB1 = neuesBlatt.OLEObjects.Add(classtype:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=8.25, Top:=410.25, Height:=30, Width:=40)
    Set CB2 = neuesBlatt.OLEObjects.Add(classtype:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=60.75, Top:=410.25, Height:=30, Width:=40)
    Set CB3 = neuesBlatt.OLEObjects.Add(classtype:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=113.25, Top:=410.25, Height:=30, Width:=40)

    Set quellBlatt = Application.VBE.ActiveVBProject.VBComponents(Sheets("Vorlage").CodeName)
    Set zielBlatt = Application.VBE.ActiveVBProject.VBComponents(neuesBlatt.CodeName)

    With zielBlatt.CodeModule
        
        .DeleteLines 1, .countoflines
        For aktZeile = 1 To quellBlatt.CodeModule.countoflines
            .InsertLines aktZeile, quellBlatt.CodeModule.Lines(aktZeile, 1)
        Next

    End With

End Sub

Das wird nach dem erstellen eines neuen Blattes mittels Code noch mal extra ausgeführt, bringt aber auch keine Änderung:
(pNummer=Worksheet Name
Code:
    With Worksheets(pNummer).OLEObjects("CommandButton1")
        .Object.Caption = "<<"
        .Top = 410.25
        .Left = 8.25
        .Height = 30
        .Width = 40
    End With
    
    With Worksheets(pNummer).OLEObjects("CommandButton2")
        .Object.Caption = "zurück"
        .Top = 410.25
        .Left = 100
        .Height = 30
        .Width = 40
    End With

    With Worksheets(pNummer).OLEObjects("CommandButton3")
        .Object.Caption = ">>"
        .Top = 410.25
        .Left = 118.75
        .Height = 30
        .Width = 40
    End With

Der Programmschnipsel und die Methodik dahinter mag euch Pro's sehr stümperhaft vorkommen, aber ich bin noch am Lernen. Mit Klassen etc. beschäftige ich mich, wenn der Stümper-Code läuft und es ans verbessern geht. Damit kann ich dann wohl auch die Codeerzeugung zur Laufzeit lassen! :)

Habt ihr einen Plan, warum die Buttons scheinbar willkürlich positioniert werden?

Gruß und Dank,
derBobby
 

Anhänge

  • right.PNG
    right.PNG
    1,2 KB · Aufrufe: 131
  • wrong.PNG
    wrong.PNG
    1,1 KB · Aufrufe: 139
Tipp: Makro - Aufnahme einschalten, die Knöpfe verschieben, Makro - Aufnahme ausschalten und den generierten Code mal ansehen. Ich weiß, ist nicht toll, gibt aber manchmal den entscheidenden Hinweis.

Aufgrund mangelndem Office 2010 kann ich es leider selbst nicht nachspielen. Soweit möglicher Code generiert bei mir jedoch das Bild, welches du haben möchtest... @Office2003
 
Tja, den Makrorecorder habe ich versucht zu verwenden. Er bekommt es zwar auf die Reihe das Erstellen aufzunehmen, aber wenn ich die Buttons verschiebe setzt er die Werte nicht fix, sondern inkrementiert sie. -.-
 
Zurück
Oben