VBA download and embed images using url from adjacent cell

≯℡__Kan透↙ 提交于 2021-01-29 04:15:21

问题


I've attempted the solution in the following. Inserting an Online Picture to Excel with VBA

Unfortunately I get a run-time error '1004' "Unable to get the Insert property of the Picture class" which stops on the following code :

    Set myPicture = ActiveSheet.Pictures.Insert(pic)

Could this be due to my Office version 2016 (64bit) ? If not, are there any suggestions of how I might get embed images to adjacent cells in column AK using the image urls from column AJ ?

Thanks in advance


回答1:


There's some evidence that Excel has trouble downloading from AWS, and I've recreated your issue using the URL you mentioned. In this case, if I were on a deadline I'd put in this fall-back method when the first one fails: download the file, then insert it into the document, then delete the file.

directDownloadFailed:
Dim FileNum As Long
Dim TempFile As String
Dim FileData() As Byte
Dim WHTTP As Object

Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")

WHTTP.Open "GET", imgURL, False
WHTTP.Send
FileData = WHTTP.ResponseBody
Set WHTTP = Nothing

FileNum = FreeFile
TempFile = "path\to\save\img.jpg"
Open TempFile For Binary Access Write As #FileNum
    Put #FileNum, 1, FileData
Close #FileNum

Set img = ActiveSheet.Pictures.Insert(TempFile)

SetAttr TempFile, vbNormal
Kill TempFile

GoTo resumeProcessingImg



回答2:


@keydemographic

I appreciate the response and that definitely sounds like an option but I cannot get that code to work or incorporate it into the code I'm using. I get a compile error "Label Not defined" on GoTo resumeProcessingImg

The following will download and embed the images into the cells but the code stops once it gets to the s3 aws image urls. I'll try a few other ways to incorporate your code but I'm not having much luck with it so far.

This is my test file

Sub URL2IMG() 
Dim pic As String 'path of pic
Dim myPicture As Picture 'embedded pic
Dim rng As Range 'range over which we will iterate
Dim cl As Range 'iterator

Set rng = Range("b2:b12")   '<~~ as needed, Modify range to where the images are to be embedded.
For Each cl In rng
pic = cl.Offset(0, -1)      '<~~ defines image link URL in column to the left of the embedded column
Set myPicture = ActiveSheet.Pictures.Insert(pic)

'you can play with the following to manipulate the size & position of the picture.
 With myPicture
    .ShapeRange.LockAspectRatio = msoFalse

    ' currently this shrinks the picture to fit inside the cell.
    .Width = cl.Width
    .Height = cl.Height
    .Top = Rows(cl.Row).Top
    .Left = Columns(cl.Column).Left

  End With

 Next

 End Sub


来源:https://stackoverflow.com/questions/42963511/vba-download-and-embed-images-using-url-from-adjacent-cell

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!