VBA-afbeeldingsfout invoegen - Excel-tips

Inhoudsopgave

Ik moest een Excel-macro een afbeelding in Excel laten invoegen. Ik zette de macrorecorder aan, plaatste de foto. Maar toen ik die opgenomen code gebruikte, zal de foto op geen enkele andere computer verschijnen. In plaats daarvan krijg ik een rode X waar de afbeelding zou moeten zijn.

De code die werd gebruikt om te werken in Excel 2007 of eerder. Maar er is iets veranderd in Excel 2010. Wanneer u code naar ActiveSheet.Pictures.Insert uitvoert, voegt Excel * niet * de afbeelding in. In plaats daarvan voegt het een link naar de afbeelding in.

Als u de code op uw computer uitvoert, lijkt het natuurlijk alsof alles werkte. De afbeelding verschijnt.

Het lijkt erop dat de macro werkte.

Maar wanneer iemand de werkmap op een andere pc opent, krijgen ze een rode X en een bericht dat de afbeelding mogelijk is verplaatst of hernoemd.

Rode X in plaats van de afbeelding

De afbeelding staat natuurlijk niet op de computer van mijn manager. Ik heb niet om Excel gevraagd om een ​​link naar de afbeelding te maken. Ik vroeg Excel om de afbeelding in te voegen. Maar de opgenomen code voegt een link naar de foto toe.

De oplossing is om over te schakelen naar een andere code. Door Shapes.AddPicture te gebruiken, kunt u specificeren LinkToFile:=msoFalse. Hier is de code om te gebruiken:

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

Bekijk video

Videotranscriptie

Leer Excel van Podcast, aflevering 2214: Echt irritante VBA-bug wanneer u een afbeelding probeert in te voegen.

Oké. Dus, hey, dit begon te gebeuren in Excel 2010. Ik ben er onlangs weer door gebrand.

Dus ik ga een afbeelding in deze werkmap invoegen, maar ik wil die actie opnemen zodat ik het automatisch kan doen. View, Macro's, Recorder Macro, HowToInsertAPicture. Perfect. En ik ga hier gewoon een afbeelding invoegen: illustraties, afbeeldingen, laten we een van onze raketfoto's kiezen en invoegen. Oké, stop met opnemen. Mooi. Nu ga ik daar vanaf komen. Ik wil de macro's bekijken, dus Alt + F8, HowToInsertAPicture, Edit, en er staat dit: ActiveSheet.Pictures.Insert en dan het pad naar de afbeelding. Oké. Ja, dat klinkt goed. En eigenlijk zouden we dit moeten kunnen uitvoeren. Dus Alt + 8, HowToInsertAPicture en Run, en we krijgen de foto - dat is prachtig. Totdat ik dit werkboek opsla en u het laat downloaden of naar iemand anders stuur, en de afbeelding niet 'Ik kom helemaal niet opdagen - ik krijg alleen een rode X die zegt: Hé, we kunnen de foto niet meer vinden. Zoals, wat bedoel je dat je de foto niet kunt vinden? Ik heb je gevraagd om een ​​afbeelding in te voegen, geen link naar de afbeelding. Maar vanaf Excel 2010 voegt deze opgenomen code eigenlijk een link naar de afbeelding in. En als ik dit werkboek ergens op een computer open die geen toegang heeft tot dit station en dat plaatje: rode X. Super vervelend.

Oké. Dus om de een of andere reden, in Excel 2010, is het nieuwe dat je moet doen in plaats van ActiveSheet.Pictures.Insert doe je ActiveSheet.Shapes.AddPicture. Oké. En we kunnen nog steeds een bestandsnaam specificeren, maar dan deze extra argumenten die we hebben: LinkToFile = msoFalse - met andere woorden, maak niet de stomme rode link - en dan SaveWithDocument: = msoTrue - wat eigenlijk betekent zet de verdomde foto erin en ze kunnen specificeren waar het hoort te zijn - links, de bovenkant …

Nu, hoe kunnen we de hoogte en de breedte bepalen? Oké. Nou, we willen dit proportioneel verkleinen, toch? Dus ik ga de Shift-toets ingedrukt houden, bijvoorbeeld om dit terug te brengen naar minder dan één scherm vol met gegevens, misschien zoals dat daar. Dus dat is mijn doel. Ik wil de afbeelding invoegen en een balk hebben die zo groot is als die is geselecteerd. Ik kom terug naar VBA Alt + F11, Ctrl + G voor het onmiddellijke venster en ik zal vragen om:? selection.width - dus dat is een vraagteken, spatie, selectie puntbreedte en een vraagteken, selectie punt hoogte (? Selection.height). Oké, en dat zegt me over 140 en 195 - dus de breedte, 140 en 195, zo. Verwijder het onmiddellijke venster, en dan zullen we dit hier verwijderen en de code uitvoeren, en deze heeft deze daadwerkelijk ingevoegd. Het heeft de juiste maat, het kan worden geopend wanneer u dit downloadt,of ik download dit als je geen toegang hebt tot de originele foto.

Ik snap het, dingen veranderen, ze moesten de code veranderen. Maar het feit dat ze de macrorecorder niet hebben bijgewerkt en de macrorecorder ons de slechte code gaf, werkt niet. Dat is super vervelend.

Voor meer informatie over macro's, bekijk dit boek, Excel 2016 VBA-macro's, door Tracy Syrstad en mijzelf. We hebben eigenlijk een versie hiervan voor elke versie die teruggaat naar Excel 2003. Dus wat je ook hebt, op voorwaarde dat het Windows is, er is een versie voor je.

Oké, sluit het vandaag af, het is mijn probleem. Ik heb code opgenomen om een ​​afbeelding in te voegen en het maakt een link naar de afbeelding, zodat iemand anders naar wie ik de werkmap stuur de afbeelding niet kan zien. In plaats daarvan gebruik ik de Macro-recorder die ActiveSheets.Shape.Picture gebruikt, gebruik deze nieuwe ActiveSheet.Shapes.AddPicture. Of we kunnen LinkToFile specificeren, nee; opslaan met document, ja; en je bent klaar om te gaan.

Bedankt voor het kijken, ik zie je de volgende keer voor een nieuwe netcast van.

Download Excel-bestand

Om het Excel-bestand te downloaden: vba-insert-picture-bug.xlsm

Vaak registreert de macrorecorder in Excel de verkeerde code. Met de bovenstaande oplossing kunt u met succes afbeeldingen invoegen met VBA.

Excel-gedachte van de dag

Ik heb mijn Excel Master-vrienden om advies over Excel gevraagd. De gedachte van vandaag om na te denken:

"Excel is een tool in dienst van de mensen die met de gevolgen moeten leven."

Oz du Soleil

Interessante artikelen...