Как вставить изображение в Excel в указанной ячейке с помощью VBA

Я добавляю файлы ".jpg" в свой лист Excel с кодом ниже:

'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

Я не знаю, что я делаю неправильно, но он не вставляется в нужную ячейку, так что я должен сделать, чтобы поместить это изображение в указанную ячейку в Excel?

 Tim Williams17 окт. 2012 г., 16:56
Вы можете установить свойство изображения TopLeftCell.
 Berker Yüceer17 окт. 2012 г., 17:11
да, после долгих часов программирования иногда такие простые вещи, как это становится большим делом, вы знаете ..

Ответы на вопрос(3)

попробуйте код ниже.

Для заданного вами конкретного вопроса свойство TopLeftCell возвращает объект диапазона, связанный с ячейкой, в которой припаркован верхний левый угол. Чтобы разместить новое изображение в определенном месте, я рекомендую создать изображение в «правильном» месте и зарегистрировать его верхние и левые значения свойств манекена для двойных переменных.

Вставьте свой Pic, назначенный переменной, чтобы легко изменить ее имя. Объект Shape будет иметь то же имя, что и объект Picture.

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

Удачи!

Решение Вопроса

Попробуй это:

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

Лучше не выбирать ничего в Excel, это обычно не требуется и замедляет ваш код.

 BJury27 сент. 2013 г., 15:12
Для людей, приземляющихся здесь. Различные версии Excel обрабатывают этот запрос по-разному, Excel 2007 вставит изображение в виде объекта, т.е. вставит его в книгу. Excel 2010 вставит его в виде ссылки, что является плохим временем, если вы планируете отправить его кому-либо. Вам нужно изменить вставку, чтобы указать, что она встроена: Вставка (Имя файла: = <путь>, LinkToFile: = False, SaveWithDocument: = True)
 Berker Yüceer17 окт. 2012 г., 17:09
Быстрый и Хороший ответ, спасибо.

работающей на ПК и Mac, и пытался найти код, который бы работал для вставки картинок на ПК и Mac. Это сработало для меня, так что, надеюсь, кто-то еще может использовать это!

Примечание: переменные strPictureFilePath и strPictureFileName должны быть установлены на допустимые пути ПК и Mac, например

Для ПК: strPictureFilePath = "E: \ Dropbox \" и strPictureFileName = "TestImage.jpg" и с Mac: strPictureFilePath = "Macintosh HD: Dropbox:" и strPictureFileName = "TestImage.jpg"

Код как следует:

    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

Ваш ответ на вопрос