VBA Indsæt billedfejl - Excel-tip

Jeg havde brug for en Excel-makro til at indsætte et billede i Excel. Jeg tændte for makrooptageren og indsatte billedet. Men da jeg brugte den indspillede kode, vises billedet ikke på nogen anden computer. I stedet får jeg et rødt X, hvor billedet skal være.

Koden, der bruges til at arbejde i Excel 2007 eller tidligere. Men noget ændrede sig i Excel 2010. Når du kører kode til ActiveSheet.Pictures.Insert, indsætter Excel * ikke * billedet. I stedet indsætter det et link til billedet.

Når du kører koden på din computer, ser det ud til, at alt fungerede. Billedet vises.

Det ser ud til, at makroen fungerede.

Men når nogen åbner projektmappen på en anden pc, får de et rødt X og en besked om, at billedet muligvis er blevet flyttet eller omdøbt.

Rød X i stedet for billedet

Nå, selvfølgelig er billedet ikke på min chefs computer. Jeg bad ikke om Excel for at oprette et link til billedet. Jeg bad om Excel for at indsætte billedet. Men den optagede kode indsætter et link til billedet.

Løsningen er at skifte til anden kode. Ved at bruge Shapes.AddPicture kan du angive LinkToFile:=msoFalse. Her er koden, der skal bruges:

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

Se video

Videoudskrift

Lær Excel fra Podcast, afsnit 2214: Virkelig irriterende VBA-fejl, når du prøver at indsætte et billede.

I orden. Så hej, dette begyndte at ske i Excel 2010. Jeg blev lige brændt af det igen for nylig.

Så jeg vil indsætte et billede i denne projektmappe, men jeg vil optage den handling, så jeg automatisk kan gøre det. Visning, makroer, optagermakro, HowToInsertAPicture. Perfekt. Og jeg vil bare indsætte et billede her: Illustrationer, Billeder, lad os vælge et af vores raketbilleder og Indsæt. Okay, stop optagelsen. Smuk. Nu skal jeg slippe af med det. Jeg vil se på makroerne, så Alt + F8, HowToInsertAPicture, Edit, og det siger er dette: ActiveSheet.Pictures.Insert og derefter stien til billedet. I orden. Ja, det lyder godt. Og faktisk skal vi være i stand til at køre dette. Så Alt + 8, HowToInsertAPicture og Run, så får vi billedet - det er smukt. Indtil jeg gemmer denne projektmappe og lader dig downloade den eller sende den til en anden, så ser billedet ikke 't dukker overhovedet op - alt hvad jeg får er en rød X, der siger, hej, vi kan ikke finde billedet mere. Ligesom hvad mener du, du kan ikke finde billedet? Jeg bad dig om at indsætte et billede, ikke et link til billedet. Men startende i Excel 2010 indsætter denne optagede kode faktisk et link til billedet. Og hvis jeg åbner denne projektmappe et eller andet sted på en computer, der ikke har adgang til dette drev og det billede: rød X. Super irriterende.

I orden. Af en eller anden grund er den nye ting i Excel 2010 i stedet for ActiveSheet.Pictures. Indsæt, at du gør ActiveSheet.Shapes.AddPicture. I orden. Og vi kan stadig specificere et filnavn, men så disse ekstra argumenter, vi har: LinkToFile = msoFalse-- med andre ord, opret ikke det dumme røde link-- og derefter SaveWithDocument: = msoTrue-- hvilket betyder faktisk læg darn-billedet derinde, og de kan specificere, hvor det skal være - venstre, øverste …

Hvordan finder vi ud af højden og bredden? I orden. Nå, vi vil ændre størrelsen på dette forhold, ikke? Så jeg holder Shift-tasten nede, ligesom at få dette tilbage til mindre end en skærm fuld af data, måske sådan lige der. Så det er mit mål. Jeg vil indsætte billedet og have en stråle af den størrelse, der er valgt. Jeg kommer tilbage til VBA Alt + F11, Ctrl + G for det øjeblikkelige vindue, og jeg vil bede om:? Selection.width-- så det er spørgsmålstegn, mellemrum, markeringspunkt bredde og et spørgsmålstegn, markering dot højde (? Selection.højde). Okay, og det fortæller mig om 140 og 195-- så bredden, 140 og 195, sådan. Slip af med det øjeblikkelige vindue, og så sletter vi dette og kører koden, og det indsatte det faktisk. Den har den rigtige størrelse, den kan være åben, når du downloader denne,eller jeg downloader dette, hvis du ikke har adgang til det originale billede.

Jeg forstår det, ting ændrer sig, de måtte ændre koden. Men det faktum, at de ikke opdaterede makrooptageren, og makrooptageren gav os den dårlige kode, det virker ikke. Det er super irriterende.

Nå, hej for at lære mere om makroer, se denne bog, Excel 2016 VBA-makroer, af Tracy Syrstad og mig selv. Vi har faktisk en version af denne for hver version, der går tilbage til Excel 2003. Så uanset hvad du har, forudsat at det er Windows, er der en version til dig.

Okay, afslut i dag - det er mit problem. Jeg optog kode for at indsætte et billede, og det oprettes et link til billedet, så alle andre, jeg sender projektmappen til, kan ikke se billedet. I stedet bruger jeg den makrooptager, der gør ActiveSheets.Shape.Picture, brug dette nye ActiveSheet.Shapes.AddPicture. Eller vi kan angive LinkToFile, nej; gem med dokument, ja; og du vil være god at gå.

Nå, hej, tak for at se, vi ses næste gang til endnu en netcast fra.

Download Excel-fil

For at downloade excel-filen: vba-insert-picture-bug.xlsm

Mange gange registrerer makrooptageren i Excel den forkerte kode. Med rettelsen ovenfor kan du med succes indsætte billeder ved hjælp af VBA.

Excel-tanken om dagen

Jeg har bedt mine Excel Master-venner om deres råd om Excel. Dagens tanke at tænke over:

"Excel er et værktøj i tjeneste for de mennesker, der skal leve med konsekvenserne."

Oz du Soleil

Interessante artikler...