Как загрузить рисунок в ячейку excel и сохранить его в докумете

Есть задача. Нужно загрузить изображение в ячейку excel. При этом его нужно сохранить в документе. С этим справляется Shapes.AddPicture(Paths, msoFlase). Но как его засунуть в нужную ячейку? Код ниже не работает. у меня бомбит......

Set img = ActiveCell.Shapes.AddPicture(Paths, msoFlase)

Ответы (1 шт):

Автор решения: vikttur_Stop_RU_war_in_UA

Подготавливаем почву:

Sub Main_Pictures()
    Dim rCell As Range              ' ячейка для вставки'
    Dim FolderPictures As String    ' путь к папке с рисунками'
    
    FolderPictures = ThisWorkbook.Path & "\pictures"
    If Dir(FolderPictures, vbDirectory) = "" Then MsgBox "Нет папки с рисунками", 64, "ОШИБКА": Exit Sub
    Set rCell = ActiveCell
    
    If MsgBox("Вставить рисунок?", 64 + vbYesNo, "") = vbNo Then Exit Sub
    
    Application.ScreenUpdating = False
    Call InsertPictures(rCell, FolderPictures)
    Application.ScreenUpdating = True
End Sub

Пример содержимого папки:

введите сюда описание изображения

Функция поиска в папке нужного файла:

Function fPathPicture(FolderPictures As String, NamePicture As String) As String
    Dim FileName As String, s As String
    
    FileName = Dir(FolderPictures & "\*")

    Do While FileName <> ""
        s = Left$(FileName, InStrRev(FileName, ".") - 1)
        
        If s = NamePicture Then
            fPathPicture = FolderPictures & "\" & FileName
            Exit Function
        End If

        FileName = Dir
    Loop
End Function

Ячейки до обработки макросом:

введите сюда описание изображения

Украшаем ячейку рисунком, имя которого указано в ячейке:

Sub InsertPictures(rCell As Range, FolderPictures As String)
    Dim oPic As Shape
    Dim PathPicture As String

    PathPicture = fPathPicture(FolderPictures, rCell.Value)
        
    If PathPicture <> "" Then
        Set oPic = rCell.Worksheet.Shapes.AddPicture(PathPicture, 0, 1, -1, -1, -1, -1)
        
        With oPic
            .Width = rCell.Width - 4
            .Height = rCell.Height - 4
                
            .Left = rCell.Left + 2
            .Top = rCell.Top + 2
        End With
    Else
        rCell.Value = rCell.Value & Chr$(10) & "нет картинки"
    End If
    
    Set oPic = Nothing
End Sub

Результат вставки (и попытки вставки) рисунков:

введите сюда описание изображения

Если добавить цикл обхода ячеек, можно вставлять картинки массово (например, во вновь созданный прайс с миллионным заказом :) )

→ Ссылка