Ich brauchte ein Excel-Makro, um ein Bild in Excel einzufügen. Ich schaltete den Makrorecorder ein und fügte das Bild ein. Wenn ich diesen aufgezeichneten Code verwendet habe, wird das Bild auf keinem anderen Computer angezeigt. Stattdessen bekomme ich ein rotes X, wo das Bild sein sollte.
Der Code, der in Excel 2007 oder früher verwendet wurde. In Excel 2010 hat sich jedoch etwas geändert. Wenn Sie Code für ActiveSheet.Pictures.Insert ausführen, fügt Excel das Bild * nicht * ein. Stattdessen wird ein Link zum Bild eingefügt.
Wenn Sie den Code auf Ihrem Computer ausführen, scheint natürlich alles funktioniert zu haben. Das Bild erscheint.

Wenn jemand die Arbeitsmappe auf einem anderen PC öffnet, erhält er ein rotes X und die Meldung, dass das Bild möglicherweise verschoben oder umbenannt wurde.

Natürlich befindet sich das Bild nicht auf dem Computer meines Managers. Ich habe nicht nach Excel gefragt, um einen Link zum Bild zu erstellen. Ich bat um Excel, um das Bild einzufügen. Der aufgezeichnete Code fügt jedoch einen Link zum Bild ein.
Die Lösung besteht darin, zu einem anderen Code zu wechseln. Mit Shapes.AddPicture können Sie angeben LinkToFile:=msoFalse
. Hier ist der zu verwendende Code:
Sub HowToInsertPicture() ' This code fails in 2010 or newer ' ActiveSheet.Pictures.Insert( _ ' "C:UsersBillDesktopPhotoPrintAll RocketaWalg180422-3.jpg.webp").Select NewFN = "C:UsersBillDesktopPhotoPrintAll RocketaWalg180422-3.jpg.webp" ActiveSheet.Shapes.AddPicture(Filename:=NewFN, _ LinkToFile:=msoFalse, _ SaveWithDocument:=msoTrue, _ Left:=1, Top:=1, Width:=140, Height:=195).Select End Sub
Schau Video
Video-Transkript
Lernen Sie Excel aus Podcast, Episode 2214: Wirklich ärgerlicher VBA-Fehler, wenn Sie versuchen, ein Bild einzufügen.
In Ordung. Also, hey, das hat in Excel 2010 angefangen. Ich habe mich kürzlich wieder davon verbrannt.
Ich werde also ein Bild in diese Arbeitsmappe einfügen, aber ich möchte diese Aktion aufzeichnen, damit ich sie automatisch ausführen kann. Ansicht, Makros, Rekorder-Makro, HowToInsertAPicture. Perfekt. Und ich werde hier nur ein Bild einfügen: Illustrationen, Bilder, wählen wir eines unserer Raketenfotos und Einfügen. Okay, hör auf aufzunehmen. Wunderschönen. Jetzt werde ich das loswerden. Ich möchte einen Blick auf die Makros werfen, also Alt + F8, HowToInsertAPicture, Edit, und es heißt: ActiveSheet.Pictures.Insert und dann der Pfad zum Bild. In Ordung. Ja, das hört sich gut an. Und tatsächlich sollten wir in der Lage sein, dies auszuführen. Also Alt + 8, HowToInsertAPicture und Run, und wir bekommen das Bild - das ist wunderschön. Bis ich diese Arbeitsmappe speichere und Sie sie herunterladen oder an eine andere Person senden lassen, und das Bild dann nicht mehr angezeigt wird.Ich tauche überhaupt nicht auf - alles was ich bekomme ist ein rotes X, das sagt: Hey, wir können das Bild nicht mehr finden. Was meinst du damit, dass du das Bild nicht finden kannst? Ich habe Sie gebeten, ein Bild einzufügen, keinen Link zum Bild. Ab Excel 2010 fügt dieser aufgezeichnete Code jedoch tatsächlich einen Link zum Bild ein. Und wenn ich diese Arbeitsmappe irgendwo auf einem Computer öffne, der keinen Zugriff auf dieses Laufwerk und dieses Bild hat: rotes X. Super nervig.
In Ordung. Aus irgendeinem Grund ist in Excel 2010 das Neue anstelle von ActiveSheet.Pictures.Insert, dass Sie ActiveSheet.Shapes.AddPicture ausführen. In Ordung. Und wir können immer noch einen Dateinamen angeben, aber dann diese zusätzlichen Argumente, die wir haben: LinkToFile = msoFalse - mit anderen Worten, erstellen Sie nicht den dummen roten Link - und dann SaveWithDocument: = msoTrue - was eigentlich bedeutet Setzen Sie das verdammte Bild dort ein und sie können angeben, wo es sein soll - links, oben …
Wie ermitteln wir nun die Höhe und die Breite? In Ordung. Nun, wir wollen die Größe proportional ändern, oder? Also werde ich die Umschalttaste gedrückt halten, um dies auf weniger als einen Bildschirm voller Daten zurückzubringen, vielleicht genau dort. Das ist mein Ziel. Ich möchte das Bild einfügen und einen Strahl dieser Größe mit dieser Auswahl haben. Ich komme für das unmittelbare Fenster zu VBA Alt + F11, Strg + G zurück und frage nach :? Auswahlbreite - das sind also Fragezeichen, Leerzeichen, Auswahlpunktbreite und ein Fragezeichen, Auswahlpunkthöhe (? Auswahlhöhe). Okay, und das sagt mir ungefähr 140 und 195 - also die Breite 140 und 195 so. Entfernen Sie das unmittelbare Fenster, und hier löschen wir es und führen den Code aus, und er wird tatsächlich eingefügt. Es hat die richtige Größe und kann geöffnet werden, wenn Sie es herunterladen.oder ich lade dies herunter, wenn Sie keinen Zugriff auf das Originalbild haben.
Ich verstehe, die Dinge ändern sich, sie mussten den Code ändern. Aber die Tatsache, dass sie den Makrorecorder nicht aktualisiert haben und der Makrorecorder uns den schlechten Code gab, funktioniert nicht. Das ist super nervig.
Um mehr über Makros zu erfahren, lesen Sie dieses Buch, Excel 2016 VBA-Makros, von Tracy Syrstad und mir. Wir haben tatsächlich eine Version davon für jede Version, die auf Excel 2003 zurückgeht. Was auch immer Sie haben, vorausgesetzt, es ist Windows, es gibt eine Version für Sie.
Okay, heute fertig - das ist mein Problem. Ich habe Code zum Einfügen eines Bildes aufgezeichnet und es wird ein Link zum Bild erstellt, sodass jeder andere, dem ich die Arbeitsmappe sende, das Bild nicht sehen kann. Stattdessen verwende ich den Makrorecorder, der ActiveSheets.Shape.Picture ausführt. Verwenden Sie dieses neue ActiveSheet.Shapes.AddPicture. Oder wir können LinkToFile angeben, nein; mit Dokument speichern, ja; und du wirst gut sein zu gehen.
Nun, hey, danke fürs Zuschauen, wir sehen uns beim nächsten Mal für einen weiteren Netcast von.
Laden Sie die Excel-Datei herunter
So laden Sie die Excel-Datei herunter: vba-insert-picture-bug.xlsm
Oft zeichnet der Makrorecorder in Excel den falschen Code auf. Mit dem obigen Fix können Sie Bilder erfolgreich mit VBA einfügen.
Excel-Gedanke des Tages
Ich habe meine Excel Master-Freunde um Rat zu Excel gebeten. Der heutige Gedanke zum Nachdenken:
"Excel ist ein Werkzeug im Dienste der Menschen, die mit den Konsequenzen leben müssen."
Oz du Soleil