Jag behövde ett Excel-makro infoga en bild i Excel. Jag slog på makroinspelaren, satte in bilden. Men när jag använde den inspelade koden visas bilden inte på någon annan dator. Istället får jag ett rött X där bilden ska vara.
Koden som används för att fungera i Excel 2007 eller tidigare. Men något förändrades i Excel 2010. När du kör koden till ActiveSheet.Pictures.Insert, är * inte * att infoga bilden. Istället sätter den in en länk till bilden.
Naturligtvis, när du kör koden på din dator, verkar det som om allt fungerade. Bilden visas.

Men när någon öppnar arbetsboken på en annan dator får de ett rött X och ett meddelande om att bilden kan ha flyttats eller bytt namn.

Naturligtvis finns bilden inte på min chefs dator. Jag bad inte om att Excel skulle skapa en länk till bilden. Jag bad om att Excel skulle infoga bilden. Men den inspelade koden infogar en länk till bilden.
Lösningen är att byta till annan kod. Genom att använda Shapes.AddPicture kan du ange LinkToFile:=msoFalse
. Här är koden att använda:
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
Kolla på video
Videoutskrift
Lär dig Excel från Podcast, avsnitt 2214: Verkligt irriterande VBA-bug när du försöker infoga en bild.
OK. Så hej, det här började hända i Excel 2010. Jag blev precis bränd av det igen nyligen.
Så jag ska infoga en bild i den här arbetsboken, men jag vill spela in den åtgärden så att jag automatiskt kan göra det. Visa, makron, inspelningsmakro, HowToInsertAPicture. Perfekt. Och jag ska bara infoga en bild här: Illustrationer, bilder, låt oss välja en av våra raketfoton och infoga. Okej, sluta spela in. Skön. Nu ska jag bli av med det. Jag vill titta på makron, så Alt + F8, HowToInsertAPicture, Edit, och det står är detta: ActiveSheet.Pictures.Insert och sedan sökvägen till bilden. OK. Ja, det låter bra. Och i själva verket borde vi kunna köra detta. Så Alt + 8, HowToInsertAPicture och Run, så får vi bilden - det är vackert. Tills jag sparar den här arbetsboken och låter dig ladda ner den eller skicka den till någon annan, och då gör bilden inte 'Jag dyker inte alls - allt jag får är ett rött X som säger, hej, vi kan inte hitta bilden längre. Gillar vad menar du att du inte hittar bilden? Jag bad dig att infoga en bild, inte en länk till bilden. Men från och med Excel 2010 infogar den inspelade koden faktiskt en länk till bilden. Och om jag öppnar den här arbetsboken någonstans på en dator som inte har tillgång till den här enheten och den bilden: röd X. Super irriterande.
OK. Så av någon anledning, i Excel 2010, är det nya att göra istället för ActiveSheet.Pictures.Insert du gör ActiveSheet.Shapes.AddPicture. OK. Och vi kan fortfarande ange ett filnamn, men sedan dessa extra argument som vi har: LinkToFile = msoFalse-- med andra ord, skapa inte den dumma röda länken-- och sedan, SaveWithDocument: = msoTrue-- vilket egentligen betyder sätt in den darnbilden där och de kan ange var den ska vara - den vänstra, den övre …
Hur räknar vi ut höjden och bredden? OK. Tja, vi vill ändra storlek på detta proportionellt, eller hur? Så jag ska hålla ner Skift-tangenten, som att få tillbaka det till mindre än en skärm full av data, kanske så där precis. Så det är mitt mål. Jag vill infoga bilden och ha en stråle i storlek med den valda. Jag kommer tillbaka till VBA Alt + F11, Ctrl + G för det omedelbara fönstret och jag ber om:? Selection.width-- så det är frågetecken, mellanslag, urval prickbredd och ett frågetecken, urval punkthöjd (? Val.höjd) Okej, och det berättar för mig om 140 och 195-- så bredden, 140 och 195, så här. Bli av med det omedelbara fönstret, och sedan tar vi bort det här och kör koden, och det satte det faktiskt in. Den har rätt storlek, den kan vara öppen när du laddar ner den här,eller jag laddar ner det här om du inte har tillgång till originalbilden.
Jag förstår, saker förändras, de var tvungna att ändra koden. Men det faktum att de inte uppdaterade makroinspelaren, och makroinspelaren gav oss den dåliga koden, det fungerar inte. Det är super irriterande.
Tja, hej för att lära dig mer om makron, kolla in den här boken, Excel 2016 VBA-makron, av Tracy Syrstad och jag själv. Vi har faktiskt en version av denna för varje version som går tillbaka till Excel 2003. Så vad du än har, förutsatt att det är Windows, finns det en version för dig.
Okej, avsluta idag - det är mitt problem. Jag spelade in kod för att infoga en bild och det skapar en länk till bilden, så alla andra som jag skickar arbetsboken till kan inte se bilden. Istället använder jag Macro-inspelaren som gör ActiveSheets.Shape.Picture, använd den här nya ActiveSheet.Shapes.AddPicture. Eller så kan vi ange LinkToFile, nej; spara med dokument, ja; och du är bra att gå.
Tja, hej, tack för att du tittar, vi ses nästa gång för en ny netcast från.
Ladda ner Excel-fil
För att ladda ner excel-filen: vba-insert-picture-bug.xlsm
Många gånger registrerar makroinspelaren fel kod i Excel. Med fixen ovan kan du framgångsrikt infoga bilder med VBA.
Excel-tanke på dagen
Jag har frågat mina Excel Master-vänner om deras råd om Excel. Dagens tanke att fundera på:
"Excel är ett verktyg i tjänst för människor som måste leva med konsekvenserna."
Oz du Soleil