无法使用链接在电子表格中插入图片

时间:2018-08-22 07:18:33

标签: vba image excel-vba shape

我在vba中编写了一个脚本,该脚本在Url中使用column b,并将图像插入到URL旁边的column c中。当我使用此image link时该脚本有效,但当我使用此image link时该脚本失败。即使使用第二个链接,如何使我的脚本发挥作用?

这是我到目前为止的尝试:

Sub InsertImages()
    Dim pics$, myPics As Shape, PicExists As Boolean, cel As Range

    For Each cel In Range("C2", Range("B2").End(xlDown).Offset(0, 1))
        PicExists = False
        pics = cel.Offset(0, -1)

        For Each myPics In ActiveSheet.Shapes
            If myPics.TopLeftCell.Row = cel.Row Then PicExists = True: Exit For
        Next myPics

        If Not PicExists Then
            With ActiveSheet.Pictures.Insert(pics)
                .ShapeRange.LockAspectRatio = msoFalse
                .Width = cel.Width
                .Height = cel.Height
                .Top = Rows(cel.Row).Top
                .Left = Columns(cel.Column).Left
            End With
        End If
    Next cel
End Sub

发布脚本:尽管我上面的脚本可以使用第一个链接插入图片,但图片看起来与源代码有很大不同。 更清晰:图像变得发胖。

1 个答案:

答案 0 :(得分:1)

(1)似乎无法使用.picures.insert从亚马逊服务器复制图像-这可能是由于Amazon而非Excel。但是,将其下载为ADODB.Stream可行,因此可能可以解决。我用来自This answer的代码进行了测试,并且可以正常工作。

(2)您将图像的位置和大小显式设置为Excel单元格,并要求不保留 AspectRatio 。如果将其设置为True,Excel将自动保持宽度与高度之间的比例-因此更改宽度也会自动更改高度(反之亦然)。

如果要保持图像的原始大小,请删除设置图像宽度和高度的线:

With ActiveSheet.Pictures.Insert(pics)
   .ShapeRange.LockAspectRatio = msoTrue
   .Top = Rows(cel.Row).Top
   .Left = Columns(cel.Column).Left
End With

如果要调整图像大小以使其适合单元格:

With ActiveSheet.Pictures.Insert(pics)
    .ShapeRange.LockAspectRatio = msoTrue
    .Top = Rows(cel.Row).Top
    .Left = Columns(cel.Column).Left
    If .Width / .Height > cel.Width / cel.Height Then
        .Width = cel.Width
    Else
        .Height = cel.Height
    End If
End With