QueryTables循环中的VBA错误处理

时间:2016-08-05 20:22:38

标签: excel vba excel-vba csv error-handling

我正在从Google财经导入多个csv文件,并将数据保存到单个工作表中。每当一个URL无效时,我希望它转到一个错误处理程序,在那里它基本上说"找不到这个信息"然后继续回到网上抓取下一个csv文件。

代码工作正常UNTIL它到达一个无效的url,并执行错误处理程序。错误处理程序第一次执行其工作,但是当循环继续使用新URL时,即使URL有效,它也会再次出错。

一旦查询表.Refresh错误一次,每个url之后也会出错,即使它是一个有效的url。有没有办法清除错误并转到下一个URL?

Code:

Sub getQuotes()

For i = 1 To 3775
    sym = Worksheets("2").Range("C" & i)
    lookup = "TEXT;http://www.google.com/finance/historical?q=" + sym + "&startdate=Jun+1%2C+2016&enddate=Aug+5%2C+2016&num=30&authuser=1&output=csv"
    With Worksheets("Raw Data").QueryTables.Add(Connection:=lookup, Destination:=Worksheets("Raw Data").Range("A2"))
        .Name = _
        " "
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 775
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1)
        .TextFileDecimalSeparator = ","
        .TextFileTrailingMinusNumbers = True
        On Error GoTo Err1:
        .Refresh BackgroundQuery:=True
    End With
Next

Err1:
Worksheets("Raw Data").Range("A:F").EntireColumn.Insert
Worksheets("Raw Data").Range("A2") = sym + " data could not be extracted"
Resume Next
End Sub

1 个答案:

答案 0 :(得分:0)

虽然我无法重现您引用的特定问题,但您在错误处理部分之前错过了Exit Sub。没有它,Err1:下的代码会在For循环结束后执行,无论是否有错误。

只需在Exit Sub上方的行上添加Err1:,然后点击即可。我的代码使用此更改在sym列表中间处理错误。