Автоматическая ширина изображения метода Shapes.AddPicture с фиксированной высотой

У меня есть код, который помещает изображения с фиксированной высотой и фиксированной шириной в ячейки.

Как изменить этот VBA для размещения изображений - автоматическая ширина на фиксированной высоте (80,5), сохраняя исходное соотношение сторон, используя этот пример из метода Excel Shapes.AddPicture?

Sub URLPicturesInsert()
    
    Dim Rng As Range, cell As Range, filename As String
    Dim Pshp As Shape
    Dim aUrls() As String
    Dim i As Long
    
    
    Application.ScreenUpdating = False
    Set Rng = ActiveSheet.Range("G2:G5")
    
    On Error Resume Next
    
    For Each cell In Rng
        
        If cell.Value <> "" Then
            aUrls = Split(cell.Value, "|")
            
            For i = LBound(aUrls) To UBound(aUrls)
                filename = Trim(aUrls(i))
                
                ActiveSheet.Shapes.AddPicture _
                filename:=filename, _
                LinkToFile:=msoFalse, _
                SaveWithDocument:=msoTrue, _
                Left:=cell.Left + (i * 80.5), _
                Top:=cell.Top, _
                Width:=80.5, _
                Height:=80.5
    
            Next i
            
            cell.EntireRow.RowHeight = 80.5
            
            cell.Value = ""
            
        End If
        
        
    Next cell

Range("G2").Select
Application.ScreenUpdating = True

MsgBox "Process completed successfully", vbInformation, "Success"

End Sub
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать Shape.ScaleHeight.

factor — это 80,5, деленное на его текущую высоту. RelativeToOriginalSize ложно, так как мы масштабируем на основе его текущей высоты, а не исходной высоты. Scale может быть любым из вариантов в зависимости от того, как он лучше всего соответствует вашим потребностям.

Пример:

With Sheet1.Shapes("Picture 1")
    .ScaleHeight 80.5 / .Height, msoFalse, msoScaleFromTopLeft
End With

Для вашего кода:

    With ActiveSheet.Shapes.AddPicture( _
        fileName:=fileName, _
        LinkToFile:=msoFalse, _
        SaveWithDocument:=msoTrue, _
        Left:=Cell.Left + (i * 80.5), _
        top:=Cell.top, _
        Width:=-1, _
        Height:=-1 _
    )
        .ScaleHeight 80.5 / .Height, msoFalse, msoScaleFromTopLeft
    End With

Другие вопросы по теме