【发布时间】:2014-09-16 04:34:01
【问题描述】:
我的目标: 我在工作表的列中有一个 14K URL 的列表。 这些 URL 中的每一个都有一个图像。类似于网站横幅的东西。 我想将每个横幅图像的尺寸检索到同一张表的另一列中。
谁能告诉我这在 Excel VBA 中是否可行。
我已经尝试了一些事情,但所有这些都像是在拐弯抹角,而不是直截了当。
我试图获取图像的 URLS 。然后使用 'URLDownloadToFile' 将这些 URL 下载到 HDD。然后我运行更多代码来获取尺寸。
更新:美国东部标准时间 2014 年 9 月 15 日下午 4:10
这就是我所做的: 我在工作表 1 中使用此代码加载 URL(来自 A 列)并检索 B 列中的横幅图像 URL
Private Sub GetEm_Click()
Dim ImageURL
Dim PageURL
Dim IE As New InternetExplorer
IE.Visible = True
For RowIndex = 0 To 15000
pURL = Sheet1.Range("A" & i).Value
On Error Resume Next
IE.Navigate pURL
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE
Dim Doc As HTMLDocument
Set Doc = IE.document
URL = Doc.getElementsByTagName("img")(1).src
Sheet1.Range("B" & i).Select 'I select and then populate the result value so that i can see the rows scrolling. This will give me an idea that the macro is still running.
Sheet1.Range("B" & i).Value = URL
Next i
IE.Quit
End Sub
上面这段代码的问题是,大约 150 行后,IE 停止响应,我的代码挂起。
如果可行,那么我的计划是使用 B 列中的图像 URL 下载图像: 为此,如前所述,我使用: 'URLDownloadToFile'
然后,一旦我下载了它们,我就会运行一个 vb 脚本来获取它们的尺寸。
我希望有更好的直接方法来做到这一点。
【问题讨论】:
-
向我们展示您的尝试并描述您使用该方法遇到的具体问题。 FWIW,这可能是我尝试的第一件事:下载文件,然后获取它们的尺寸。
-
如果您缩短循环并将其分解为多个循环,或者添加
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)并在循环中添加Sleep #,代码是否仍会挂起? -
在短数据块中循环并没有帮助。任务管理器中 iexplore.exe 的内存使用量不断增加并在达到 1000 MB 多一点时停止响应。睡眠也没有帮助。不过谢谢。
-
您可以尝试获取页面的 HTML 并将其存储在字符串中,然后解析字符串以获得 img 标签。这应该可以解决内存问题并防止冻结。