VBA Insert Picture Bug - Excel Tips

Sommario

Avevo bisogno di una macro di Excel per inserire un'immagine in Excel. Ho acceso il registratore macro, ho inserito l'immagine. Ma quando ho usato quel codice registrato, l'immagine non apparirà su nessun altro computer. Invece, ottengo una X rossa dove dovrebbe essere l'immagine.

Il codice utilizzato per funzionare in Excel 2007 o versioni precedenti. Ma qualcosa è cambiato in Excel 2010. Quando si esegue il codice in ActiveSheet.Pictures.Insert, Excel * non * inserisce l'immagine. Invece, sta inserendo un collegamento all'immagine.

Ovviamente, quando esegui il codice sul tuo computer, sembra che tutto abbia funzionato. L'immagine appare.

Sembra che la macro abbia funzionato.

Ma quando qualcuno apre la cartella di lavoro su un altro PC, riceve una X rossa e un messaggio che indica che l'immagine potrebbe essere stata spostata o rinominata.

X rossa al posto dell'immagine

Beh, ovviamente l'immagine non è sul computer del mio manager. Non ho chiesto a Excel di creare un collegamento all'immagine. Ho chiesto a Excel di inserire l'immagine. Ma il codice registrato sta inserendo un collegamento all'immagine.

La soluzione è passare a un codice diverso. Utilizzando Shapes.AddPicture, è possibile specificare LinkToFile:=msoFalse. Ecco il codice da usare:

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

Guarda un video

Trascrizione del video

Impara Excel da Podcast, episodio 2214: Bug VBA davvero fastidioso quando stai cercando di inserire un'immagine.

Tutto a posto. Quindi, ehi, questo ha iniziato ad accadere in Excel 2010. Recentemente mi sono scottato di nuovo.

Quindi inserirò un'immagine in questa cartella di lavoro, ma voglio registrare quell'azione in modo da poterla fare automaticamente. Visualizza, Macro, Macro del registratore, HowToInsertAPicture. Perfetto. E inserirò solo un'immagine qui: Illustrazioni, Immagini, scegliamo una delle nostre foto di razzi e Inserisci. Va bene, interrompi la registrazione. Bellissimo. Ora me ne sbarazzerò di questo. Voglio dare un'occhiata alle macro, quindi Alt + F8, HowToInsertAPicture, Edit, e dice che è questo: ActiveSheet.Pictures.Insert e quindi il percorso dell'immagine. Tutto a posto. Sì, suona bene. E, infatti, dovremmo essere in grado di eseguirlo. Quindi Alt + 8, HowToInsertAPicture e Run, e otteniamo l'immagine, è bellissimo. Fino a quando non salvo questa cartella di lavoro e ti permetto di scaricarla o inviarla a qualcun altro, e poi l'immagine non lo faNon mi faccio vedere … tutto quello che ricevo è una X rossa che dice: Ehi, non riusciamo più a trovare la foto. Come cosa vuoi dire che non riesci a trovare l'immagine? Ti ho chiesto di inserire un'immagine, non un collegamento all'immagine. Ma a partire da Excel 2010, questo codice registrato sta effettivamente inserendo un collegamento all'immagine. E se apro questa cartella di lavoro da qualche parte su un computer che non ha accesso a questa unità e a quell'immagine: X rossa. Super fastidioso.

Tutto a posto. Quindi, per qualche motivo, in Excel 2010, la nuova cosa da fare è invece di ActiveSheet.Pictures.Insert fai ActiveSheet.Shapes.AddPicture. Tutto a posto. E possiamo ancora specificare un nome file, ma poi questi argomenti extra che abbiamo: LinkToFile = msoFalse-- in altre parole, non creare lo stupido collegamento rosso-- e poi, SaveWithDocument: = msoTrue-- che significa, in realtà mettere la dannata immagine lì e possono specificare dove dovrebbe essere: a sinistra, in alto …

Ora, come calcoliamo l'altezza e la larghezza? Tutto a posto. Bene, vogliamo ridimensionarlo proporzionalmente, giusto? Quindi terrò premuto il tasto Maiusc, tipo, riporterò questo a meno di una schermata piena di dati, forse così proprio lì. Quindi questo è il mio obiettivo. Voglio inserire l'immagine e avere un raggio di quella dimensione con quello selezionato. Tornerò a VBA Alt + F11, Ctrl + G per la finestra immediata e chiederò:? selection.width-- quindi questo è punto interrogativo, spazio, larghezza del punto di selezione e un punto interrogativo, altezza del punto di selezione (? Selection.height). Va bene, e questo mi dice circa 140 e 195, quindi la larghezza, 140 e 195, così. Sbarazzarsi della finestra immediata, quindi qui lo elimineremo ed eseguiremo il codice, che in realtà lo ha inserito. È della dimensione giusta, potrà essere aperto quando lo scaricherai,oppure lo scarico, se non hai accesso all'immagine originale.

Ho capito, le cose cambiano, hanno dovuto cambiare il codice. Ma il fatto che non abbiano aggiornato il registratore di macro e il registratore di macro ci stesse dando il codice errato, non funziona. È super fastidioso.

Bene, ehi, per saperne di più sulle macro, dai un'occhiata a questo libro, Excel 2016 VBA Macros, di Tracy Syrstad e me stesso. In realtà abbiamo una versione di questo per ogni versione che risale a Excel 2003. Quindi, qualunque cosa tu abbia, ammesso che sia Windows, c'è una versione per te.

Alright, wrap-up today-- it's my problem. I recorded code to insert a picture and it's creating a link to the picture, so anyone else I send the workbook to can't see the picture. Instead, I'm using the Macro recorder that does ActiveSheets.Shape.Picture, use this new ActiveSheet.Shapes.AddPicture. Or we can specify LinkToFile, no; save with document, yes; and you'll be good to go.

Well, hey, thanks for watching, I'll see you next time for another netcast from.

Download Excel File

To download the excel file: vba-insert-picture-bug.xlsm

Many times, the macro recorder in Excel records the wrong code. With the fix above, you can successfully insert images using VBA.

Excel Thought Of the Day

I've asked my Excel Master friends for their advice about Excel. Today's thought to ponder:

"Excel è uno strumento al servizio delle persone che devono convivere con le conseguenze".

Oz du Soleil

Articoli interessanti...