VBA Insert Picture Bug - Съвети за Excel

Трябваше ми макрос на Excel да вмъкне снимка в Excel. Включих макрорекордера, вмъкнах картината. Но когато използвах записания код, картината няма да се появи на никой друг компютър. Вместо това получавам червен X там, където трябва да бъде картината.

Кодът, използван за работа в Excel 2007 или по-нова версия. Но нещо се промени в Excel 2010. Когато стартирате код в ActiveSheet.Pictures.Insert, Excel не * вмъква картината. Вместо това той вмъква връзка към картината.

Разбира се, когато стартирате кода на компютъра си, изглежда, че всичко е работило. Картината се появява.

Изглежда макросът е работил.

Но когато някой отвори работната книга на друг компютър, той получава червен X и съобщение, че картината може да е била преместена или преименувана.

Червено X вместо изображението

Е, разбира се, изображението не е на компютъра на моя мениджър. Не поисках Excel да създаде линк към картината. Поисках Excel да вмъкне картината. Но записаният код вмъква връзка към картината.

Решението е да преминете към различен код. С помощта на Shapes.AddPicture можете да посочите LinkToFile:=msoFalse. Ето кода, който да използвате:

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

Гледам видео

Видео транскрипция

Научете Excel от Podcast, епизод 2214: Наистина досадно VBA бъг, когато се опитвате да вмъкнете снимка.

Добре. Така че, хей, това започна да се случва в Excel 2010. Току-що наскоро отново се изгорих от това.

Така че ще вмъкна картина в тази работна книга, но искам да запиша това действие, за да мога автоматично да го направя. Изглед, макроси, записващ макрос, HowToInsertAPicture. Перфектно. И аз просто ще вмъкна снимка тук: Илюстрации, Картини, нека да изберем една от нашите ракетни снимки и Вмъкване. Добре, спрете да записвате. Красив. Сега ще се отърва от това. Искам да погледна макросите, така че Alt + F8, HowToInsertAPicture, Edit и там се казва: ActiveSheet.Pictures.Insert и след това пътя към картината. Добре. Да, това звучи добре. И всъщност трябва да можем да го изпълним. Така че Alt + 8, HowToInsertAPicture и Run, и ние получаваме картината - това е красиво. Докато не запазя тази работна книга и не ви позволя да я изтеглите или изпратите на някой друг, а след това картината нямаизобщо не се появява - всичко, което получавам, е червено X, казващо: Хей, вече не можем да намерим снимката. Като какво искаш да кажеш, че не можеш да намериш снимката? Помолих ви да вмъкнете снимка, а не връзка към нея. Но започвайки от Excel 2010, този записан код всъщност вмъква връзка към картината. И ако отворя тази работна книга някъде на компютър, който няма достъп до това устройство и тази картина: червен X. Супер досадно.

Добре. Така че, по някаква причина, в Excel 2010, новото нещо, което трябва да направите, е вместо ActiveSheet.Pictures.Insert правите ActiveSheet.Shapes.AddPicture. Добре. И все още можем да посочим име на файл, но след това тези допълнителни аргументи, които имаме: LinkToFile = msoFalse - с други думи, не създавайте глупавата червена връзка - и след това SaveWithDocument: = msoTrue - което означава, всъщност поставете проклетата снимка там и те могат да посочат къде трябва да бъде - вляво, отгоре …

Сега, как да разберем височината и ширината? Добре. Е, искаме да променим размера пропорционално, нали? Така че ще задържа клавиша Shift, като върна това на по-малко от един екран, пълен с данни, може би точно там. Така че това е моята цел. Искам да вмъкна картината и да имам лъч с този размер с избрания. Ще се върна на VBA Alt + F11, Ctrl + G за непосредствения прозорец и ще поискам:? selection.width - така че това е въпросителен знак, интервал, ширина на селектираната точка и въпросителен знак, височина на селективната точка (? Selection.height). Добре, и това ми говори за 140 и 195 - така че ширината, 140 и 195, така. Отървете се от непосредствения прозорец и след това тук ще изтрием това и ще стартираме кода и той всъщност го е вмъкнал. Той е с правилния размер, ще може да бъде отворен, когато изтеглите това,или изтеглям това, ако нямате достъп до оригиналната снимка.

Разбирам, нещата се променят, трябваше да променят кода. Но фактът, че не са актуализирали макрорекордера и макрорекордерът ни е дал лошия код, не работи. Това е супер досадно.

Е, хей, за да научите повече за макросите, вижте тази книга, Excel 2016 VBA Macros, от Трейси Сирстад и аз. Всъщност имаме версия на тази за всяка версия, която се връща към Excel 2003. Така че, каквото и да имате, при условие че е Windows, има версия за вас.

Добре, приключване днес - това е моят проблем. Записах код, за да вмъкна картина и той създава връзка към нея, така че всеки друг, който изпращам работната книга, не може да я види. Вместо това използвам Macro рекордер, който прави ActiveSheets.Shape.Picture, използвайте този нов ActiveSheet.Shapes.AddPicture. Или можем да посочим LinkToFile, не; запишете с документ, да; и ще бъде добре да тръгнете.

Е, хей, благодаря за гледането, ще се видим следващия път за поредното излъчване от.

Изтеглете Excel файла

За да изтеглите файла на Excel: vba-insert-picture-bug.xlsm

Много пъти записващият макрос в Excel записва грешен код. С горната корекция можете успешно да вмъквате изображения с помощта на VBA.

Мисъл на деня в Excel

Помолих приятелите си в Excel Master за съвети относно Excel. Днешната мисъл за размисъл:

„Excel е инструмент в услуга на хората, които трябва да живеят с последствията.“

Оз дю Солей

Интересни статии...