VBA Insert Picture Bug - Excel Tips

Innholdsfortegnelse

Jeg trengte at en Excel-makro satte inn et bilde i Excel. Jeg slo på makroopptakeren, satte inn bildet. Men da jeg brukte den innspilte koden, vises ikke bildet på noen annen datamaskin. I stedet får jeg en rød X der bildet skal være.

Koden som brukes til å fungere i Excel 2007 eller tidligere. Men noe endret seg i Excel 2010. Når du kjører kode til ActiveSheet.Pictures.Insert, setter Excel ikke * inn bildet. I stedet setter den inn en lenke til bildet.

Selvfølgelig, når du kjører koden på datamaskinen din, ser det ut til at alt fungerte. Bildet vises.

Ser ut som makroen fungerte.

Men når noen åpner arbeidsboken på en annen PC, får de et rødt X og en melding om at bildet kan ha blitt flyttet eller gitt nytt navn.

Rød X i stedet for bildet

Vel, selvfølgelig er ikke bildet på lederen min datamaskin. Jeg ba ikke om Excel for å opprette en lenke til bildet. Jeg ba om Excel for å sette inn bildet. Men den innspilte koden setter inn en lenke til bildet.

Løsningen er å bytte til annen kode. Ved å bruke Shapes.AddPicture kan du spesifisere LinkToFile:=msoFalse. Her er koden du skal bruke:

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 på video

Videoutskrift

Lær Excel fra Podcast, episode 2214: Virkelig irriterende VBA-feil når du prøver å sette inn et bilde.

Ok. Så hei, dette begynte å skje i Excel 2010. Jeg ble nettopp brent av det igjen.

Så jeg skal sette inn et bilde i denne arbeidsboken, men jeg vil ta opp den handlingen slik at jeg automatisk kan gjøre det. View, Macros, Recorder Macro, HowToInsertAPicture. Perfekt. Og jeg skal bare sette inn et bilde her: Illustrasjoner, Bilder, la oss velge et av rakettbildene våre og Sett inn. OK, stopp opptaket. Vakker. Nå skal jeg bli kvitt det. Jeg vil ta en titt på makroene, så Alt + F8, HowToInsertAPicture, Edit, og det står er dette: ActiveSheet.Pictures.Insert og deretter banen til bildet. Ok. Ja, det høres bra ut. Og faktisk skal vi kunne kjøre dette. Så Alt + 8, HowToInsertAPicture, og Run, og vi får bildet - det er vakkert. Inntil jeg lagrer denne arbeidsboken og lar deg laste den ned eller sende den til noen andre, og da ikke bildet 'Ikke dukke opp i det hele tatt - alt jeg får er en rød X som sier, Hei, vi finner ikke bildet lenger. Liker hva mener du at du ikke finner bildet? Jeg ba deg om å sette inn et bilde, ikke en lenke til bildet. Men fra og med Excel 2010 setter denne innspilte koden faktisk inn en lenke til bildet. Og hvis jeg åpner denne arbeidsboken et sted på en datamaskin som ikke har tilgang til denne stasjonen og det bildet: rød X. Super irriterende.

Ok. Av en eller annen grunn, i Excel 2010, er den nye tingen å gjøre, i stedet for ActiveSheet.Pictures. Sett inn at du gjør ActiveSheet.Shapes.AddPicture. Ok. Og vi kan fremdeles spesifisere et filnavn, men så disse ekstra argumentene vi har: LinkToFile = msoFalse-- med andre ord, ikke opprett den dumme røde lenken-- og deretter SaveWithDocument: = msoTrue-- som egentlig betyr legg darnbildet der inne, og de kan spesifisere hvor det skal være - til venstre, øverst …

Nå, hvordan finner vi ut høyden og bredden? Ok. Vel, vi vil endre størrelsen på dette proporsjonalt, ikke sant? Så jeg skal holde nede Shift-tasten, som å få dette tilbake til mindre enn en skjerm full av data, kanskje slik akkurat der. Så det er mitt mål. Jeg vil sette inn bildet og ha en stråle i størrelsen som er valgt. Jeg kommer tilbake til VBA Alt + F11, Ctrl + G for det umiddelbare vinduet, og jeg vil be om:? utvalg. bredde - så det er spørsmålstegn, mellomrom, valg prikkbredde og et spørsmålstegn, valg prikkhøyde (? Valg.høyde). Greit, og det forteller meg om 140 og 195-- så bredden, 140 og 195, slik. Bli kvitt det umiddelbare vinduet, og så sletter vi dette og kjører koden, og den satte den faktisk inn. Den har riktig størrelse, den vil være åpen når du laster ned denne,eller jeg laster ned dette hvis du ikke har tilgang til originalbildet.

Jeg forstår det, ting endrer seg, de måtte endre koden. Men det faktum at de ikke oppdaterte makroopptakeren, og makroopptakeren ga oss dårlig kode, det fungerer ikke. Det er super irriterende.

Vel, hei for å lære mer om makroer, sjekk ut denne boka, Excel 2016 VBA-makroer, av Tracy Syrstad og meg selv. Vi har faktisk en versjon av dette for hver versjon som går tilbake til Excel 2003. Så uansett hva du har, forutsatt at det er Windows, er det en versjon for deg.

Greit, avslutt i dag - det er mitt problem. Jeg spilte inn kode for å sette inn et bilde, og det er opprettet en lenke til bildet, så alle andre jeg sender arbeidsboken til, kan ikke se bildet. I stedet bruker jeg makroopptakeren som gjør ActiveSheets.Shape.Picture, bruk denne nye ActiveSheet.Shapes.AddPicture. Eller vi kan spesifisere LinkToFile, nei; lagre med dokument, ja; og du vil være god å gå.

Vel, hei, takk for at du så, vi sees neste gang for nok en netcast fra.

Last ned Excel-fil

For å laste ned Excel-filen: vba-insert-picture-bug.xlsm

Mange ganger registrerer makroopptakeren feil kode. Med løsningen ovenfor kan du med hell sette inn bilder ved hjelp av VBA.

Excel-tanken om dagen

Jeg har bedt mine Excel Master-venner om deres råd om Excel. Dagens tanke å tenke på:

"Excel er et verktøy i tjeneste for menneskene som må leve med konsekvensene."

Oz du Soleil

Interessante artikler...