it-swarm.com.de

So fügen Sie ein Bild an einer bestimmten Zellenposition mit VBA in Excel ein

Ich füge meiner Excel-Tabelle ".jpg" -Dateien mit dem folgenden Code hinzu:

'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

Ich weiß nicht, was ich falsch mache, aber es wird nicht in die richtige Zelle eingefügt. Was muss ich tun, um dieses Bild in eine bestimmte Zelle in Excel zu übernehmen?

23
Berker Yüceer

Versuche dies:

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

Es ist besser, nichts in Excel auszuwählen, es ist normalerweise nie notwendig und verlangsamt Ihren Code.

41
SWa

Wenn es nur darum geht, ein Bild einzufügen und seine Größe zu ändern, versuchen Sie den folgenden Code.

Für die spezifische Frage, die Sie gestellt haben, gibt die Eigenschaft TopLeftCell das Bereichsobjekt zurück, das sich auf die Zelle bezieht, in der die linke obere Ecke geparkt ist. Um ein neues Bild an einer bestimmten Stelle zu platzieren, empfehle ich, ein Bild an der "rechten" Stelle zu erstellen und seine oberen und linken Eigenschaftswerte des Dummy in doppelten Variablen zu registrieren.

Fügen Sie Ihr Bild einer Variablen hinzu, um dessen Namen einfach zu ändern. Das Shape-Objekt hat denselben Namen wie das Picture-Objekt.

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

Viel Glück!

1
FCastro

Ich habe an einem System gearbeitet, das auf einem PC und einem Mac ausgeführt wurde und um den Code zu kämpfen versuchte, der zum Einfügen von Bildern auf dem PC und Mac funktionierte. Das hat für mich funktioniert, hoffentlich kann jemand anders davon Gebrauch machen!

Hinweis: Die Variablen strPictureFilePath und strPictureFileName müssen auf gültige PC- und Mac-Pfade gesetzt werden 

Für PC: strPictureFilePath = "E:\Dropbox \" und strPictureFileName = "TestImage.jpg" und mit Mac: strPictureFilePath = "Macintosh HD: Dropbox:" und strPictureFileName = "TestImage.jpg"

Code wie folgt:

    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
Tristan