Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 名称为的查询已存在_Excel_Vba_Yahoo Finance - Fatal编程技术网

Excel 名称为的查询已存在

Excel 名称为的查询已存在,excel,vba,yahoo-finance,Excel,Vba,Yahoo Finance,所以我想使用ExcelVBA创建一个雅虎财务历史数据的自动查询(csv下载)。我设置了一个函数,让Excel自动查询股票代码及其开始和结束日期(分别为K1、K2、K3) 代码如下: Sub YFIN_get() ' ' YFIN_get Macro ' Dim ticker As String, sday, eday As Long Columns("A:G").ClearContents ticker = Range("K1") sday = Range("K2") eday = Range(

所以我想使用ExcelVBA创建一个雅虎财务历史数据的自动查询(csv下载)。我设置了一个函数,让Excel自动查询股票代码及其开始和结束日期(分别为K1、K2、K3)

代码如下:

Sub YFIN_get()
'
' YFIN_get Macro
'
Dim ticker As String, sday, eday As Long
Columns("A:G").ClearContents
ticker = Range("K1")
sday = Range("K2")
eday = Range("K3")
'
    ActiveWorkbook.Queries.Add Name:="Table 4", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Csv.Document(Web.Contents(""https://query1.finance.yahoo.com/v7/finance/download/" & ticker & "?period1=" & sday & "&period2=" & eday & "&interval=1d&events=history""),[Delimiter="","", Columns=7, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""Use First Row as Headers"" = Table.PromoteHeaders(Source, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & "    #""Change Type"" = Table" & _
        ".TransformColumnTypes(#""Use First Row as Headers"",{{""Date"", type date}, {""Open"", type number}, {""High"", type number}, {""Low"", type number}, {""Close"", type number}, {""Adj Close"", type number}, {""Volume"", Int64.Type}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Change Type"""
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Table 4"";Extended Properties="""""), Destination:=Range("$A$1")). _
        QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [Table 4]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Table_4"
        .Refresh BackgroundQuery:=False
    End With
    Application.CommandBars("Queries and Connections").Visible = False
End Sub
但是,每当我第二次运行代码时,VBA总是检索运行时错误“已存在名为“Table 4”的查询”。调试错误时,它会突出显示ActiveWorkbook.Queries.Add Name…..部分


有人能帮我解决这个问题吗?也许删除查询?如果是,我应该如何删除查询?(我是VBA新手,非常感谢您的帮助)

您可以在尝试添加它之前使用它:

On Error Resume Next
ActiveWorkbook.Queries("Table 4").Delete
On Error GoTo 0

听起来您已经有一个名为table4-
名称:=“Table 4”
-您似乎需要使用其他名称,或者删除原始名称。@br是的,但我希望自动删除查询,以便可以多次运行代码以刷新。因此。。。在
.Add
方法之前使用
.Delete
方法?还是我遗漏了什么?嘿,谢谢。你能告诉我把这三条线放在哪里吗?或者从我发布的一个帖子+你的建议中写出完整的代码?我对VBA完全不熟悉,尝试在代码中插入这三行,但仍然返回错误。请在尝试添加它之前纠正它,就像我在回答中所说的那样。