VBA自动化从网站复制/粘贴

时间:2012-10-24 03:32:46

标签: internet-explorer excel-vba vba excel

行。所以这是我对这段代码如何工作的思考过程。我有一张工作表,其中包含我希望使用for循环迭代的Web地址列表。对于每个网址,我想将整个网页复制并粘贴到工作簿中的临时表。页面粘贴到Excel(2010)后,我会做一些格式化。只将我想要的内容从临时表复制并粘贴到主表。然后在Internet Explorer中导航下一个链接,就像将网页粘贴到临时表之前一样,然后将我需要的内容附加到主表单上。我遇到了以下问题:

1)无论我在哪个工作表上声明粘贴到它的网页总是粘贴到第一张工作表。这恰好是我有命令按钮的表单,但这不应该有所作为。应该吗?

2)附加到主表单不起作用。当宏完成运行时,似乎已粘贴到主表的唯一记录来自上一个网页。

我在想,也许我需要做的是在选择/复制/粘贴网页到Excel以解决问题#2之间添加一段时间的暂停。非常感谢您对这两个问题的帮助。

Private Sub CommandButton1_Click()
Dim IE As Object

startTime = Now()

Set IE = CreateObject("InternetExplorer.Application")

For rows1 = 2 To 11
    For columns1 = 2 To 2
        strLink = ThisWorkbook.Sheets("links").Cells(rows1, columns1)

With IE
    .Visible = True
    .Navigate strLink
Do While IE.ReadyState <> 4
            DoEvents
Loop

IE.ExecWB 17, 0
IE.ExecWB 12, 2

ThisWorkbook.Sheets("temp").Paste Range("A1")

End With

'Copy/paste and format from temp to master sheet
nextRow = ThisWorkbook.Sheets("master").Range("A1").End(xlDown).Row + 1
ThisWorkbook.Sheets("temp").Range("A173:S247").Copy
ThisWorkbook.Sheets("Master").Range("A" & nextRow).PasteSpecial Paste:=xlPasteValues

Next columns1
Next rows1

endTime = Now()

MsgBox ("Done running.  It took from " & startTime & " to " & endTime & ".")


End Sub  

1 个答案:

答案 0 :(得分:1)

问题1:您的代码ThisWorkbook.Sheets("temp").Paste Range("A1")将始终引用活动工作表 - 范围(“A1”)暗示使用活动工作表,因为没有已定义的工作表对象。您需要在函数的参数中引用正确的工作表。因此,如果您希望屏幕粘贴到“临时”以外的其他内容,请尝试ThisWorkbook.Sheets("temp").Paste ThisWorkbook.Sheets("othersheet").Range("A1")

(如果将ThisWorkbook和每个Sheet设置为变量,您的代码将更易读)

问题2:您希望在主工作表的最后一行之后粘贴。丢失该部分的第一行,保留第二行,用

替换第三行
ThisWorkbook.Sheets("Master").Cells(ThisWorkbook.Sheets("Master").UsedRange.Rows.Count + 2, 1).PasteSpecial Paste:=xlPasteValues

(同样,您应该使用变量来表示工作簿和工作表对象,以使代码更清晰)