如何在工作表之间复制在vba中,我尝试记录宏,但是不起作用

时间:2018-06-27 09:02:09

标签: excel vba excel-vba

你好,我有一个程序,可以从yahoo财务中获取数据,然后选择数值数据,然后将其粘贴到代码下的第一张工作表中。

Sub fundamentals()

For i = 2 To Sheets(1).Cells(1, 1).End(xlToRight).Column

ticker = Sheets(1).Cells(1, i)

qurl = "https://finance.yahoo.com/quote/" & ticker & "/key-statistics?p=" & ticker & ""

Sheets(2).Select
Sheets(2).Cells.Clear

With ActiveSheet.QueryTables.Add(Connection:="URL;" & qurl,       Destination:=Sheets(2).Range("A1"))
.BackgroundQuery = True
.Refresh BackgroundQuery = False
End With


Sheets(2).Range("B1:B67").Copy
Sheets(1).Select
Cells(2, i).Select
ActiveSheet.Paste
CutCopyMode = False

Next i

End Sub

它可以正常工作,但是直到将其自己粘贴到我的第一张纸上之前,它不起作用,但是在左上角显示按Enter选择目的地或粘贴。我想让它自动工作,以便它自己粘贴。

亲切的问候

1 个答案:

答案 0 :(得分:0)

有很多事情并非天生错误,而是代码中的错误编码做法。

您应该避免像瘟疫一样使用Select, ActiveSheet, Active... ,因为它带有“很多不可预见的问题,从长远来看最终会损害您的程序” 。我绝对建议您阅读此question here,甚至自己再做任何编码之前:

此外,还应使用程序。不要将所有内容都转储到巨大的代码块中。您未来的自我将在以后感谢您的可读性(或在您之后尝试更新代码的任何人,甚至更多)。

  

我不确定,如果我要做的事情是对的,那么从您最初的问题还不清楚,那么预期的结果是什么,但这至少应作为您的代码应该是什么样的模板形式:

Private Sub update_table()

Sheets(2).Cells.Clear

Dim qurl As String
Dim ticker As Long

For i = 2 To Sheets(1).Cells(1, 1).End(xlToRight).Column
    ticker = Sheets(1).Cells(1, i)
    qurl = "https://finance.yahoo.com/quote/" & ticker & "/key-statistics?p=" & ticker & ""

    With Sheets(2).QueryTables.Add(Connection:="URL;" & qurl, Destination:=Sheets(2).Range("A1"))
        .BackgroundQuery = True
        .Refresh BackgroundQuery = False
    End With
Next i

End Sub

和调用update_table()

的copy_paste
Private Sub cp_table()

    Call update_table
    Sheets(2).Range("B1").CurrentRegion.Copy
    Sheets(1).Range("A2").PasteSpecial

End Sub

如果您可以使用预期的输入数据和预期的输出来更新您的问题,我可以相应地编辑答案以确保代码可以正常工作,并且不仅可以用作伪代码。