CopyPicture-Methode der Bereichsklasse ist fehlgeschlagen - manchmal

8

Ich habe einen VBA-Code, mit dem ich Bereiche als Bild kopieren und in ein Diagramm einfügen kann. Es tut dies, damit ich es in ein Bild speichern kann. Dieser Code hat eine Erfolgsquote von 70%, und wenn er nicht funktioniert, gibt er den Fehler "CopyPicture-Methode der Bereichsklasse ist fehlgeschlagen" aus. Ich verstehe nicht, warum es manchmal funktioniert und manchmal nicht, dass es die gleichen Eingaben nimmt.

Kann jemand helfen?

%Vor%     
user3759627 14.07.2014, 15:25
quelle

4 Antworten

1

Normalerweise neigen Leute dazu, application.screenupdating=false überall hinzuzufügen, als Gewohnheit (und es ist normalerweise gut).

Aber in diesem Fall kann Excel den Bereich (richtig) nicht sehen und kann ihn daher nicht kopieren. Ich schätze, es tut intern etwas, damit es funktioniert, aber wegen schlechter Codierung oder Verzögerung funktioniert es nicht jedes Mal.

Also, ich habe überprüft, dass, wenn Sie application.screenupdating=false direkt vor dem copypicture entfernen, es funktioniert, (auch ohne und besser als die klare Zwischenablage / Rg.copy / appenence = xlPrinter / Lösungen).

Hier ist ein Beispiel für Code, den ich verwende (mit Überschutz gegen schlechte Kopien):

%Vor%

Sie können die Teile überspringen, die Sie nicht benötigen (dieses ist ein Steuerelement, wenn die Schaltfläche rechts ist, kopieren Sie den Bereich in das Bild eines Labels auf einem Benutzerformular.

    
Patrick Lepelletier 15.12.2017 18:37
quelle
0

Für mich hatte ich ein ähnliches Problem und ich könnte es lösen, indem ich zwischen xlScreen und xlPrinter in selectRange.CopyPicture

ändere

Ich hoffe, das hilft

    
MusuNaji 20.07.2016 15:45
quelle
0

Ich habe mit demselben Problem gekämpft wie du und ich denke, dass das nichts mit unserem VBA-Code oder dem Mangel an Programmierkenntnissen zu tun hat. Der Fehler ist zu zufällig.

Wenn ich nach der Fehlermeldung auf DEBUG geklickt habe und F8 gedrückt habe, um den Code Schritt für Schritt weiter auszuführen, konnte ich den Fehler überspringen. Nach der problematischen Zeile habe ich F5 gedrückt, um im normalen Ausführungsmodus fortzufahren.

Natürlich ist das Obige keine Lösung, aber zeigt nichts falsch mit meiner Codierung.

Nun, ich habe das gemacht und es hat für mich funktioniert:

vor diesem Satz,

%Vor%

Ich habe diesen hinzugefügt:

%Vor%

und ich hatte nie wieder den Fehler in CopyPicture method.

Bei der Suche nach diesem Problem an anderen Stellen habe ich herausgefunden, dass einige Benutzer den Fehler überspringen konnten, indem sie diesen Satz vor der CopyPicture -Methode einführten:

%Vor%     
Chema Vascuence 14.11.2016 18:38
quelle
-1

Obwohl dies ein alter Beitrag ist, wird dies vielleicht jemandem helfen. Ich hatte lange Zeit mit ähnlichen Problemen zu kämpfen. CopyPicture ist fehlgeschlagen (auf manchen Computern häufiger als andere, aber schwer auf meinem Laptop zu replizieren), als ich den Bereich das kopiert habe enthielt ein eingebettetes PNG-Bild. Es ist nur fehlgeschlagen in Application.Visible=0 mode, Application.Visible=1 hat gut funktioniert (für meine Anwendung ist es zwingend erforderlich, Excel im unsichtbaren Modus auszuführen). Endlich habe ich festgestellt, dass ich das Problem zu 100% reproduzieren kann, wenn es auf einer VM mit 1 CPU läuft. Die folgende Lösung ist seltsam, scheint aber mein Problem vollständig zu lösen.

Das eingebettete PNG ist ein Shape in Excel API-Bedingungen. Ich musste einfach durch die Formen radeln (noch nicht mal etwas tun), bevor ich CopyPicture :

anrufe %Vor%

Mein Befund ist etwas ähnlich zu diese Lösung , wo CopyPicture in einem Bereich mit Diagrammen fehlgeschlagen ist. In ihrem Fall Das Aktivieren von Arbeitsmappe und Bereich selbst hat geholfen.

Vermutlich scheint es plausibel zu sein, dass Excel auf einem langsamen oder stark belasteten Computer eine "lazy processing" der komplexen Objekte auf einer Seite durchführt, d. h. die Bilder erst wiedergibt, wenn auf das Objekt in irgendeiner Weise zugegriffen wird. Eine Möglichkeit, das Rendering zu erzwingen, scheint in Visible=1 mode zu laufen. Eine andere Möglichkeit besteht darin, durch die Objekte zu fahren. Wenn dies der Fall ist, ist es ein Fehler in der CopyPicture - Implementierung von Excel, bei der komplexe Objekte nicht vor dem Kopieren zum Rendern gezwungen werden. Wenn die Kopiermethode feststellt, dass das Rendern für den Zielbereich nicht bereit ist, löst sie einfach einen Fehler aus, anstatt den Bereich zum Rendern zu zwingen. Nun, das ist zumindest meine Theorie.

    
glexey 26.02.2017 06:12
quelle

Tags und Links