2012-10-17 33 views
22

sto aggiungendo i file ".jpg" al mio foglio di Excel con il codice qui sotto:Come inserire un'immagine in Excel in una posizione cella specificata con VBA

'Add picture to excel 
xlApp.Cells(i, 20).Select 
xlApp.ActiveSheet.Pictures.Insert(picPath).Select 
'Calgulate new picture size 
With xlApp.Selection.ShapeRange 
    .LockAspectRatio = msoTrue 
    .Width = 75 
    .Height = 100 
End With 
'Resize and make printable 
With xlApp.Selection 
    .Placement = 1 'xlMoveAndSize 
    '.Placement = 2 'xlMove 
    '.Placement = 3 'xlFreeFloating 
    .PrintObject = True 
End With 

Non so quello che sono sbagliare ma non viene inserito nella cella a destra, quindi cosa dovrei fare per inserire questa immagine in una cella specificata in Excel?

+1

È possibile impostare la proprietà TopLeftCell dell'immagine. –

+0

sì, dopo lunghe ore di programmazione a volte le cose facili come questo diventa un grosso problema che conosci .. –

risposta

34

Prova questo:

With xlApp.ActiveSheet.Pictures.Insert(PicPath) 
    With .ShapeRange 
     .LockAspectRatio = msoTrue 
     .Width = 75 
     .Height = 100 
    End With 
    .Left = xlApp.ActiveSheet.Cells(i, 20).Left 
    .Top = xlApp.ActiveSheet.Cells(i, 20).Top 
    .Placement = 1 
    .PrintObject = True 
End With 

E 'meglio non .SELECT nulla in Excel, di solito è mai necessario e rallenta il codice.

+0

Risposta rapida e piacevole grazie. –

+29

Per le persone che arrivano qui. Diverse versioni di Excel gestiscono questa richiesta in modo diverso, Excel 2007 inserirà l'immagine come oggetto, ovvero la incorpora nella cartella di lavoro. Excel 2010 lo inserirà come collegamento, che è un brutto momento se prevedi di inviarlo a chiunque. È necessario modificare l'inserto per specificare che è incorporato: Inserisci (Nome file: = , LinkToFile: = False, SaveWithDocument: = True) – BJury

1

Ho lavorato a un sistema che funzionava su PC e Mac e mi sono battuto per trovare il codice che funzionasse per l'inserimento di immagini su PC e Mac. Questo ha funzionato per me, quindi spero che qualcun altro possa farne uso!

Nota: le variabili strPictureFilePath e strPictureFileName devono essere impostati per PC e Mac validi percorsi Eg

per PC: strPictureFilePath = "E: \ Dropbox \" e strPictureFileName = "TestImage.jpg" e con Mac: strPictureFilePath = "Macintosh HD: Dropbox:" e strPictureFileName = "TestImage.jpg"

codice come segue:

On Error GoTo ErrorOccured 

    shtRecipeBrowser.Cells(intDestinationRecipeRowCount, 1).Select 

    ActiveSheet.Pictures.Insert(Trim(strPictureFilePath & strPictureFileName)).Select 

    Selection.ShapeRange.Left = shtRecipeBrowser.Cells(intDestinationRecipeRowCount, 1).Left 
    Selection.ShapeRange.Top = shtRecipeBrowser.Cells(intDestinationRecipeRowCount, 1).Top + 10 
    Selection.ShapeRange.LockAspectRatio = msoTrue 
    Selection.ShapeRange.Height = 130 
1

Se è semplicemente sull'inserimento e il ridimensionamento di un'immagine, provare il codice qui sotto.

Per la domanda specifica, la proprietà TopLeftCell restituisce l'oggetto intervallo relativo alla cella in cui è parcheggiato l'angolo in alto a sinistra. Per posizionare una nuova immagine in un punto specifico, consiglio di creare un'immagine nella posizione "giusta" e di registrare i valori delle proprietà superiore e sinistra del dummy su due variabili.

Inserire il Pic assegnato a una variabile per cambiare facilmente il suo nome. L'oggetto Shape avrà lo stesso nome dell'oggetto immagine.

Sub Insert_Pic_From_File(PicPath as string, wsDestination as worksheet) 
    Dim Pic As Picture, Shp as Shape 
    Set Pic = wsDestination.Pictures.Insert(FilePath) 
    Pic.Name = "myPicture" 
    'Strongly recommend using a FileSystemObject.FileExists method to check if the path is good before executing the previous command 
    Set Shp = wsDestination.Shapes("myPicture") 
    With Shp 
     .Height = 100 
     .Width = 75 
     .LockAspectRatio = msoTrue 'Put this later so that changing height doesn't change width and vice-versa) 
     .Placement = 1 
     .Top = 100 
     .Left = 100 
    End with 
End Sub 

Buona fortuna!