Sub Macro1()
Dim URL As String
Dim Path As String
Dim i As Integer
For i = 2 To 50
If Range("Prices!E" & i).Value <> 1 Then
URL = Range("Prices!D" & i).Text
Path = Range("Prices!F" & i).Text
End If
Sheet19.Activate
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;" & URL _
, Destination:=ActiveSheet.Range("$A$1"))
.Name = _
"" & Path
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
//'In the Line above the above
//'Run time error '1004
//'An unexpected error has occured
End With
Next i
End Sub
上面的代码在指定的行处创建错误。谷歌搜索.Refresh BackgroundQuery表明它在循环中的功能是挑剔的。只需删除该行就不会显示任何内容。
使用当前错误消息,代码适用于第一个i值,然后中断。
对于答案和评论 - TLDR:.Refresh BackgroundQuery:=如果您的查询输入无效或格式错误,False将失败。在这种情况下的问题是for ... next循环调用单元格作为url,它们中没有值。但是,只要查询格式错误,它就会失败。
答案 0 :(得分:4)
With语句中的所有前面的行都是设置属性
.Refresh BackgroundQuery := False
是方法调用。
刷新应该刷新结果 后台查询用于查询SQL数据时是可选的,因此我认为您可以将其关闭并且只有.Refresh
Query Table Refresh Method Help Link
修改强> 看起来URL有问题,当它进行刷新时,它无法做到。可能是代理问题,或者没有连接到网络,或者URL不存在。
答案 1 :(得分:1)
解决此问题的唯一方法是在每次迭代后删除活动查询表。一个有用的示例解决方案提供:
答案 2 :(得分:0)
我不确定为什么我的修复有效,但现在是:
我还在for循环中使用了querytables.add,我正在添加.asc文件。这个错误只是在最后一次添加后弹出 - 所以我的程序基本上做了我想要的,但它会中断函数。在最后一次运行For循环时,我删除了.Refresh BackgroundQuery:= False语句。它必须通过For循环粘贴我之前所有运行的数据。
基本上我替换了这个:
.Refresh BackgroundQuery:=False
有了这个:
If Index = ctr Then
Else
.Refresh BackgroundQuery:=False
End If