你好,我有一个程序,可以从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选择目的地或粘贴。我想让它自动工作,以便它自己粘贴。
亲切的问候
答案 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()
Private Sub cp_table()
Call update_table
Sheets(2).Range("B1").CurrentRegion.Copy
Sheets(1).Range("A2").PasteSpecial
End Sub
如果您可以使用预期的输入数据和预期的输出来更新您的问题,我可以相应地编辑答案以确保代码可以正常工作,并且不仅可以用作伪代码。