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