0

好的。所以这是我对这段代码应该如何工作的思考过程。我有一张包含我想使用 for 循环遍历的网址列表的工作表。对于每个网址,我想将整个网页复制并粘贴到工作簿中的临时工作表中。将页面粘贴到 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  
4

1 回答 1

1

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

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

问题 2:您希望在主表的最后一行之后粘贴。丢失该部分的第一行,保留第二行,将第三行替换为

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

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

于 2012-10-24T04:44:50.447 回答