Trebuia să am un macro Excel care să introducă o imagine în Excel. Am pornit reportofonul macro, am introdus poza. Dar când am folosit acel cod înregistrat, imaginea nu va apărea pe niciun alt computer. În schimb, primesc un X roșu unde ar trebui să fie imaginea.
Codul folosit pentru a funcționa în Excel 2007 sau anterior. Dar ceva s-a schimbat în Excel 2010. Când rulați codul pe ActiveSheet.Pictures.Insert, Excel * nu * inserează imaginea. În schimb, introduce un link către imagine.
Desigur, atunci când rulați codul pe computer, acesta pare ca totul a funcționat. Imaginea apare.

Dar când cineva deschide registrul de lucru pe un alt computer, primește un X roșu și un mesaj că poza a fost mutată sau redenumită.

Ei bine, desigur, imaginea nu este pe computerul managerului meu. Nu am cerut ca Excel să creeze un link către imagine. Am cerut Excel să introducă poza. Dar codul înregistrat introduce o legătură la imagine.
Soluția este să treceți la un cod diferit. Folosind Shapes.AddPicture, puteți specifica LinkToFile:=msoFalse
. Iată codul de utilizat:
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
Urmăriți videoclipul
Transcriere video
Aflați Excel din Podcast, Episodul 2214: Bug VBA foarte enervant atunci când încercați să inserați o imagine.
Bine. Deci, hei, acest lucru a început să se întâmple în Excel 2010. Tocmai am fost ars de asta recent.
Așa că voi introduce o imagine în acest registru de lucru, dar vreau să înregistrez acțiunea pentru a o putea face automat. Vizualizare, Macrocomenzi, Macro Recorder, HowToInsertAPicture. Perfect. Și voi introduce doar o imagine aici: Ilustrații, Imagini, să alegem una dintre fotografiile noastre de rachete și Inserare. În regulă, oprește înregistrarea. Frumos. Acum, voi scăpa de asta. Vreau să arunc o privire asupra macro-urilor, așa că Alt + F8, HowToInsertAPicture, Edit, și se spune că este următorul: ActiveSheet.Pictures.Insert și apoi calea către imagine. Bine. Da, sună bine. Și, de fapt, ar trebui să putem rula acest lucru. Deci, Alt + 8, HowToInsertAPicture și Run, și avem imaginea - asta e frumos. Până când voi salva acest registru de lucru și vă voi permite să îl descărcați sau să-l trimit altcuiva, apoi imaginea nuNu apar deloc - tot ce primesc este un X roșu care zice: Hei, nu mai putem găsi imaginea. Ce vrei să spui că nu poți găsi poza? V-am rugat să inserați o imagine, nu un link către imagine. Dar începând cu Excel 2010, acest cod înregistrat introduce de fapt un link către imagine. Și dacă deschid acest registru de lucru undeva pe un computer care nu are acces la această unitate și acea imagine: roșu X. Super enervant.
Bine. Deci, dintr-un anumit motiv, în Excel 2010, noul lucru de făcut, este în loc de ActiveSheet.Pictures.Insert faceți ActiveSheet.Shapes.AddPicture. Bine. Și putem specifica în continuare un nume de fișier, dar apoi aceste argumente suplimentare pe care le avem: LinkToFile = msoFalse - cu alte cuvinte, nu creați linkul roșu prost - și apoi, SaveWithDocument: = msoTrue-- ceea ce înseamnă, de fapt pune imaginea nenorocită acolo și pot specifica unde ar trebui să fie - stânga, sus …
Acum, cum ne dăm seama de înălțime și lățime? Bine. Ei bine, vrem să redimensionăm acest lucru proporțional, nu? Așa că voi ține apăsată tasta Shift, ca să readuc acest lucru la mai puțin de un ecran plin de date, poate așa chiar acolo. Deci acesta este scopul meu. Vreau să introduc imaginea și să am un fascicul de dimensiunea respectivă cu cel selectat. Voi reveni la VBA Alt + F11, Ctrl + G pentru fereastra imediată și voi cere:? selection.width - deci acesta este semnul întrebării, spațiul, lățimea punctului de selecție și un semn de întrebare, înălțimea punctului de selecție (? Selection.height). Bine, și asta îmi spune despre 140 și 195 - deci lățimea, 140 și 195, așa. Scăpați de fereastra imediată și apoi aici vom șterge acest lucru și vom rula codul, iar acesta l-a inserat de fapt. Are dimensiunea potrivită, va putea fi deschis când descărcați acest lucru,sau descarc acest lucru, dacă nu aveți acces la imaginea originală.
Am înțeles, lucrurile se schimbă, au trebuit să schimbe codul. Dar faptul că nu au actualizat macro recorderul și macro recorderul ne dădea codul rău, asta nu funcționează. E super enervant.
Ei bine, hei, pentru a afla mai multe despre macrocomenzi, consultați această carte, Macro-urile Excel 2016 VBA, de Tracy Syrstad și de mine. Avem de fapt o versiune a acesteia pentru fiecare versiune care revine la Excel 2003. Deci, orice ai avea, cu condiția să fie Windows, există o versiune pentru tine.
Bine, încheie astăzi - este problema mea. Am înregistrat cod pentru a insera o imagine și creează un link către imagine, astfel încât oricine altcineva să trimit registrul de lucru să nu poată vedea imaginea. În schimb, folosesc reportofonul Macro care face ActiveSheets.Shape.Picture, utilizați acest nou ActiveSheet.Shapes.AddPicture. Sau putem specifica LinkToFile, nu; salvați cu documentul, da; și vei fi bine să pleci.
Ei bine, mulțumesc pentru vizionare, ne vedem data viitoare pentru un alt netcast de la.
Descărcați fișierul Excel
Pentru a descărca fișierul Excel: vba-insert-picture-bug.xlsm
De multe ori, înregistratorul de macrocomenzi din Excel înregistrează un cod greșit. Cu remedierea de mai sus, puteți insera imagini folosind VBA.
Gândul Excel al zilei
Le-am cerut prietenilor mei Excel Master sfatul lor despre Excel. Gândul de astăzi să medităm:
"Excel este un instrument în serviciul oamenilor care trebuie să trăiască cu consecințele."
Oz du Soleil