Image 使用Excel vba,将web图像保存到磁盘
我正在尝试使用excel vba保存网页中的图像。 我设法得到了字符串(虽然不是我想要的),并且需要将其保存到磁盘 源代码的HTML代码为:Image 使用Excel vba,将web图像保存到磁盘,image,vba,excel,save,Image,Vba,Excel,Save,我正在尝试使用excel vba保存网页中的图像。 我设法得到了字符串(虽然不是我想要的),并且需要将其保存到磁盘 源代码的HTML代码为: <img id="SkuPageMainImg" data-sku="491215" alt="Papir ubleket kraft 60g 40cm 5kg/rull" class="skuImageSTD" src="/content/images/product/491215_1_xnm.jpg?v=4TWLBni1V4k8GV8B_0P-G
<img id="SkuPageMainImg" data-sku="491215" alt="Papir ubleket kraft 60g 40cm 5kg/rull" class="skuImageSTD" src="/content/images/product/491215_1_xnm.jpg?v=4TWLBni1V4k8GV8B_0P-GA" data-zoomimage="//www.staples.no/content/images/product/491215_1_xnl.jpg" data-resizeimage="{"0to1024":"/content/images/product/491215_1_xnm.jpg?v=4TWLBni1V4k8GV8B_0P-GA","1025to1450":"//www.staples.no/content/images/product/491215_1"}" data-screensize="">
这样就可以了,但我希望捕获的是数据zoomimage=
之后的url:
“//www.staples.no/content/images/product/491215_1_xnl.jpg”
不管怎样,我希望实现的是让Excel VBA将图像保存到磁盘上的一个文件中—通常是c:\folder\image\u name.jpg
有人知道执行此操作的代码吗?导入URLDownloadToFile函数并直接使用它。下面是完整的模块代码表,包括顶部的声明部分。该例程需要在a列中从第2行开始的完整img src URL列表。e、 g:
Option Explicit
#If VBA7 And Win64 Then
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" ( _
ByVal pCaller As LongPtr, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As LongPtr, _
ByVal lpfnCB As LongPtr _
) As Long
Private Declare PtrSafe Function DeleteUrlCacheEntry Lib "Wininet.dll" _
Alias "DeleteUrlCacheEntryA" ( _
ByVal lpszUrlName As String _
) As Long
#Else
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" ( _
ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long _
) As Long
Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
Alias "DeleteUrlCacheEntryA" ( _
ByVal lpszUrlName As String _
) As Long
#End If
Public Const ERROR_SUCCESS As Long = 0
Public Const BINDF_GETNEWESTVERSION As Long = &H10
Public Const INTERNET_FLAG_RELOAD As Long = &H80000000
Sub dlStaplesImages()
Dim rw As Long, lr As Long, ret As Long, sIMGDIR As String, sWAN As String, sLAN As String
sIMGDIR = "c:\folder"
If Dir(sIMGDIR, vbDirectory) = "" Then MkDir sIMGDIR
With ActiveSheet '<-set this worksheet reference properly!
lr = .Cells(Rows.Count, 1).End(xlUp).Row
For rw = 2 To lr
sWAN = .Cells(rw, 1).Value2
sLAN = sIMGDIR & Chr(92) & Trim(Right(Replace(sWAN, Chr(47), Space(999)), 999))
Debug.Print sWAN
Debug.Print sLAN
If CBool(Len(Dir(sLAN))) Then
Call DeleteUrlCacheEntry(sLAN)
Kill sLAN
End If
ret = URLDownloadToFile(0&, sWAN, sLAN, BINDF_GETNEWESTVERSION, 0&)
.Cells(rw, 2) = ret
Next rw
End With
End Sub
选项显式
#如果是VBA7和Win64,则
私有声明PtrSafe函数urldownloadtofilelib“urlmon”_
别名“URLDownloadToFileA”(_
ByVal pCaller作为LongPtr_
ByVal szURL作为字符串_
ByVal文件名为字符串_
ByVal DW保留为LongPtr_
ByVal lpfnCB作为长PTR_
)只要
私有声明PtrSafe函数DeleteUrlCacheEntry库“Wininet.dll”_
别名“DeleteUrlCacheEntryA”(_
ByVal lpszUrlName作为字符串_
)只要
#否则
专用声明函数urldownloadtofilelib“urlmon”_
别名“URLDownloadToFileA”(_
拜瓦尔·普查勒,只要_
ByVal szURL作为字符串_
ByVal文件名为字符串_
拜瓦尔:只要_
ByVal lpfnCB尽可能长_
)只要
私有声明函数DeleteUrlCacheEntry库“Wininet.dll”_
别名“DeleteUrlCacheEntryA”(_
ByVal lpszUrlName作为字符串_
)只要
#如果结束
Public Const ERROR_SUCCESS,只要=0
Public Const BINDF_GETNEWESTVERSION As Long=&H10
Public Const INTERNET\u FLAG\u重新加载长度=&H8000000
副署长
暗rw为长、lr为长、ret为长、sIMGDIR为弦、天鹅为弦、俚语为弦
sIMGDIR=“c:\folder”
如果Dir(sIMGDIR,vbDirectory)=“”,则MkDir sIMGDIR
使用ActiveSheet“非常感谢。工作就像一场梦。嗨@Jeeped,我知道这是一篇老文章,但我在从URL下载图片时面临同样的问题。我正在使用您的代码,但在B列中始终出现错误“-2146697208。我也使用了您的示例URL,但它也会导致相同的错误。会出现什么错误?
Option Explicit
#If VBA7 And Win64 Then
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" ( _
ByVal pCaller As LongPtr, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As LongPtr, _
ByVal lpfnCB As LongPtr _
) As Long
Private Declare PtrSafe Function DeleteUrlCacheEntry Lib "Wininet.dll" _
Alias "DeleteUrlCacheEntryA" ( _
ByVal lpszUrlName As String _
) As Long
#Else
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" ( _
ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long _
) As Long
Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
Alias "DeleteUrlCacheEntryA" ( _
ByVal lpszUrlName As String _
) As Long
#End If
Public Const ERROR_SUCCESS As Long = 0
Public Const BINDF_GETNEWESTVERSION As Long = &H10
Public Const INTERNET_FLAG_RELOAD As Long = &H80000000
Sub dlStaplesImages()
Dim rw As Long, lr As Long, ret As Long, sIMGDIR As String, sWAN As String, sLAN As String
sIMGDIR = "c:\folder"
If Dir(sIMGDIR, vbDirectory) = "" Then MkDir sIMGDIR
With ActiveSheet '<-set this worksheet reference properly!
lr = .Cells(Rows.Count, 1).End(xlUp).Row
For rw = 2 To lr
sWAN = .Cells(rw, 1).Value2
sLAN = sIMGDIR & Chr(92) & Trim(Right(Replace(sWAN, Chr(47), Space(999)), 999))
Debug.Print sWAN
Debug.Print sLAN
If CBool(Len(Dir(sLAN))) Then
Call DeleteUrlCacheEntry(sLAN)
Kill sLAN
End If
ret = URLDownloadToFile(0&, sWAN, sLAN, BINDF_GETNEWESTVERSION, 0&)
.Cells(rw, 2) = ret
Next rw
End With
End Sub