Code versagt wenn über Schaltfläche ausgelöst

11/11/2007 - 10:54 von Eric March | Report spam
Moin, Moin!

Zur Vorgeschichte: Eine Mappe soll eine Bedarfssymbolleiste bedienen.
Der Code den ich hier vorgeschlagen bekam (seine Essenz findet sich
unten) ist in sich einwandfrei und arbeitet. Die Buttons werden mit in
der Mappe hinterlegten Bildern versehen. Rufe ich nun die Mappe über
eine Makro auf scheitert genau diese Verzierung; öffne ich per
Doppelklick oder über das Menü klappts. Die Kröte habe ich nun geschluckt…

Mittlerweile schien es mir geboten, einen weiteren Button hinzuzufügen -
allerdings unter der Pràmisse, dass ich ihn aktiv zu- respektive wieder
abschalte. Wiederum betrachte ich meinen Code als offensichtlich
funktionsfàhig: lasse ich ihm im VBA-Editor laufen passiert genau das
was ich will (nebst etwas Leistenkosmetik als Komfortfunktion). Starte
ich den Code aber über einen CommandButton (für mich: Schaltflàche, aus
der Steuerlemente-Toolbox) so arbeitet der an sich einwandfrei, das
(selbe) Makro aber streikt aber an 2 Stellen. (2 Stellen die mir in
gewisser Weise aus der Vorgeschichte bekannt vorkommen…):

[…]
Dim PMLeiste As CommandBar
Set PMLeiste = CommandBars(LeistenName) REM LeistenName ist eine
globale StringKonstante
[…]

(Hierüber prüfe ich ob der Button vorhandne ist. Ist er wird er
entfernt; letztlich also eine typische Kugelschreiberfunktion)
Else
Stelle = PMLeiste.Controls(PositionsTastenTitel).Index REM will
BeginGroup umtopfen – betreffs Position einer bestimmten Taste X
[richtig; der Code soll noch portiert werden]
Application.CutCopyMode = xlCopy
-> Error 1004, Methode CutCopyMode wàre fehlgeschlagen

With PMLeiste.Controls.Add
.Style = msoButtonIcon
.Caption = TastenTitel REM eine String-Konstante, zz. Lokal; auch
Zentrale und TastenBild nàchste Zeile
ThisWorkbook.Worksheets(Zentrale).Shapes(TastenBild).CopyPicture
xlScreen, xlPicture
-> Error 1004, Anwendungs- oder Objektdefinierter Fehler

On Error Resume Next
.PasteFace
On Error GoTo 0
.OnAction = TastenMakro REM auch eine StringKonstante
.Move before:=Stelle + 1
If .BeginGroup = True Then
.BeginGroup = False
PMLeiste.Controls(Stelle + 2).BeginGroup = True
End If
End With
End If

Warum nur funktioniert das in VBA selbst, per Button ausgelöst [Code im
Blatt lost einfach nur diesen Code im Modul aus] kommen die beiden
Fehler? Ohne diese Schalt(flàchen)funktion ist die ganze Idee witzlos.

Die Schaltflàche liegt auf dem 2. Blatt (Nummero 1 ist die o.G.
Zentrale) - aber das kann doch nicht von Bedeutung sein: Application ist
Application??!

Eric March - eric.march(spambremse)@gmx.net

»Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.«
„Die Geschichte ist der beste Lehrmeister - mit den unaufmerksamsten
Schülern.“ Indira Gandhi
 

Lesen sie die antworten

#1 stefan onken
12/11/2007 - 12:20 | Warnen spam
hallo Eric,

Die Schaltflàche liegt auf dem 2. Blatt (Nummero 1 ist die o.G.
Zentrale) - aber das kann doch nicht von Bedeutung sein: Application ist
Application??!



Commandbutton auf Blatt: da gibt es das Problem mit der Eigenschaft
TakeFocusOnClick des button, die muss auf False gesetzt werden.
http://support.microsoft.com/kb/177527/en-us

Gruß
stefan

Ähnliche fragen