VBA - Unterschiedliche Ergebnisse je nach Durchfühungsart
#1
Hallo Community!

Ich besitze Office 2010 und erhalte je nachdem, ob ich eine Prozedur per Button, F5 oder F8 durchlaufen lasse, unterschiedliche Ergbenisse.

Folgende Prozedur wird durchlaufen:

Code:
       Worksheets("tblInputMask").ChartObjects("ChartOrig").CopyPicture
       
         With Worksheets("tblData")
             .Pictures.Paste
             y = .Cells(21, Columns.Count).End(xlToLeft).Column
             x = .Shapes.Count
             links = .Cells(13, y - 2).Left
             oben = .Cells(13, y).Top
                With .Shapes(x)
                  .LockAspectRatio = msoFalse
                  .Left = links
                  .Top = oben
                  .Height = 121
                  '.Width = 220
                  .Width = Columns(y - 2).Width + Columns(y - 1).Width + Columns(y).Width
                  .Name = "Chart_" & tblData.Cells(2, LastColumn + 2).Value
                End With
         End With
Dabei varriert die Width des Charts bzw. die Variable "y".
Wenn ich den Code mittels F8 durchlaufe, erhalte ich die korrekte Breite.
Starte ich den Code mittels Button aus dem Excel-Dokument, so ist die Breite falsch.
Ich glaube sogar, dass ich unter Office 2016 die richtige Breite erhalten habe.
Woran kann das nur liegen?
Hat jemand eine Idee?
Top
#2
Hat keiner eine Idee?
Top
#3
... nein, bis jetzt noch nicht Wink

Im Ernst: Die Beispieldatei wäre hilfreich, damit man den Fehler eventuell nachvollziehen kann.

VG - Lucky Joe
Top
#4
Würde ich wirklich sehr gerne machen (:
Es handelt sich jedoch um ein geschützes Dokument mit sensiblen Datei. Leider ist eine Musterdatei nicht möglich.


Ich weiß wie ärgerlich dies ist :/

Ich dachte eher, es handelt sich um einen allg. Fehler innerhalb der Office-Versionen.
Top
#5
Hi,
wenn bei Durchsteppen etwas funktioniert was beim Durchlauf nicht funktioniert kann dies auf ein Zeitproblem hindeuten.

Zuerst die Frage: Was ist mit F5 - funktioniert es da - dann ist es eher kein Zeitproblem
Ist der Button im Blatt auf TakeFokusOnClick auf False gesetzt?

Prinzipiell bei Arbeiten mit Grafiken:
Immer dafür sorgen, dass der Zoom auf 100% ist
Nach einem Einfügen Zeitgeben, ca. 20 - 200 MS
Dies kann man über die API Sleep ganz gut steuert hinter dem Einfügebefehl z.B.

Im Modul im Deklarationsteil
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

und dann z.B. Sleep 20 an entsprechender Stelle

Einfach mal testen

Gruß Jeanie
Top
#6
Hallo jeanie!

Vielen Dank für Deinen Beitrag.

Ich habe im entsprechenden Modul deinen Code ganz oben eingefügt sowie an mehreren Stellen mit Call Sleep(1500) eingefügt.
Leider ohne Erfolg.

Mit F8 erhalte ich das richtige Ergebnis. Auf Windows 10 mit Office 365/2016 erhalte ich auch mit F5 das richtige Ergebnis.


Schalte ich MsgBox vor " Columns(y - 2).Width + Columns(y - 1).Width + Columns(y).Width"

so erhalte ich stets unterschiedliche Ergebnisse
Top
#7
Hi,
was mir noch auffällt ist, dass du die Columns nicht über das Blatt ansprichst, dich also auf das Aktive Blatt beziehst.

ich denke mal
Worksheets("tblData").columns... ist hier gesünder Smile


Aber warum das mit F8 dann anders läuft ist wirklich seltsam. (Solltest du tatsächlich F5 mit einem anderen aktiven Blatt starten ist das dann natürlich erklärlich)

Natürlich können auf dem Rechner noch irgendwelche anderen Dinge laufen.
Es gibt auch Situationen, in welchen Excel das Blatt automatisch (im Hintergrund) aktiviert wenn ein Shape eingefügt wird.
Hat der Rechner einen Drucker angeschlossen?

Wenn du dass rein auf Office 10 reduzieren kannst und auch auf einem anderen Rechner mit Office 10 reproduzierst wird es interessant.
Top
#8
Es war in der Tat eine unvollständige Referenzierung die Ursache für dieses Problem (:

Ich muss wirklich besser drauf achten.

Ich bedanke moich vielmals!
Top


Gehe zu:


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