Excel Web查询引发错误:导入currenturl与没有导出匹配。你错过了模块参考吗?
我正在运行以下代码Excel Web查询引发错误:导入currenturl与没有导出匹配。你错过了模块参考吗?,excel,vba,Excel,Vba,我正在运行以下代码 Sub HREF_Web() Dim doc As HTMLDocument Dim output As Object Range("A1:C10000").Clear ' delete all queries Dim pq As Object For Each pq In ThisWorkbook.Queries pq.Delete Next ' delete all connections Dim cn As Object For Each cn In T
Sub HREF_Web()
Dim doc As HTMLDocument
Dim output As Object
Range("A1:C10000").Clear
' delete all queries
Dim pq As Object
For Each pq In ThisWorkbook.Queries
pq.Delete
Next
' delete all connections
Dim cn As Object
For Each cn In ThisWorkbook.Connections
cn.Delete
Next
Set ie = New InternetExplorer
ie.Visible = True
ie.navigate Worksheets("Sheet1").Range("L1") ' getting url from the worksheet
Do
'DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document
Set output = doc.getElementsByTagName("a")
For Each link In output
Debug.Print link.innerHTML
If link.innerHTML Like "*" & "Data Corrections" & "*" Then
link.Click
currenturl = ie.LocationURL
ActiveWorkbook.Queries.Add Name:="Table 0", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Web.Page(Web.Contents(currenturl))," & Chr(13) & "" & Chr(10) & " Data0 = Source{0}[Data]," & Chr(13) & "" & Chr(10) & " #""Promoted Headers"" = Table.PromoteHeaders(Data0, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & " #""Changed Type"" = Table.TransformColumnTypes(#""Promoted Headers"",{{""Data Notice Page"", type any}, {""eMBS Inc"", type any}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " " & _
" #""Changed Type"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Table 0"";Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Table 0]")
.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_0"
.Refresh BackgroundQuery:=False
End With
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A2").Select
End If
Next
MsgBox "Done!"
End Sub
错误发生在这一行:
.Refresh BackgroundQuery:=False
“currenturl”变量来自新打开的IE窗口。也许这不是做这类事情的方式,但我认为它会起作用。基本上,我希望循环浏览父对象中的所有HREF标记,查找包含“数据更正”的标记,单击这些链接,导航到这些子URL(共4个),然后从“表0”对象导入数据
这是错误的图像
我认为您收到的错误消息来自Power Query 变量
currenturl
是在VBA中定义的,而不是在Power Query中定义的(两者是独立的,Power Query不了解VBA变量或它们可能包含的内容)
因此,当对M
代码求值时,它知道您希望将一些名为currenturl
的表达式作为参数传递给Web.Contents
函数,但它找不到正在任何位置(在其自己的求值链中)定义/分配的currenturl
我认为你的选择是:
- 不要使用
“…Web.Contents(currenturl)…”
,而是尝试使用“…Web.Contents(“¤turl&”“”)…
(即,让VBA计算currenturl
,并将其实际值传递给Power Query,而不是将源自其计算链/范围之外的表达式传递给Power Query)。这可能是最快的修复方法,尽管URL的每一面都需要用“
包围,以便Power Query将其作为文本/字符串进行计算,而且可能还有其他需要注意的事情
- 使用更纯粹的方法,即全部在VBA中,或全部在
M
/Power Query中(可能需要更多的工作,但这意味着不需要VBA与Power Query对话,反之亦然)
- 让VBA代码转储所有
currenturl
s(来自所有循环迭代)到特定的范围/列,然后让Power Query查看该特定范围,为每个currenturl
返回一个M
表,然后合并并作为一个表加载到Excel工作表中。从技术上讲,完成查询后,只需刷新它(可以从VBA完成),但进行查询需要了解M
或Power query GUI
我认为您收到的错误消息来自Power Query
变量currenturl
是在VBA中定义的,而不是在Power Query中定义的(两者是独立的,Power Query不了解VBA变量或它们可能包含的内容)
因此,当对M
代码求值时,它知道您希望将一些名为currenturl
的表达式作为参数传递给Web.Contents
函数,但它找不到正在任何位置(在其自己的求值链中)定义/分配的currenturl
我认为你的选择是:
- 不要使用
“…Web.Contents(currenturl)…”
,而是尝试使用“…Web.Contents(“¤turl&”“”)…
(即,让VBA计算currenturl
,并将其实际值传递给Power Query,而不是向Power Query传递一个源自其计算链/范围之外的表达式)。这可能是最快的修复方法,尽管URL的每一面都需要用“
包围,以便Power Query将其作为文本/字符串进行计算,而且可能还有其他需要注意的事项
- 使用更纯粹的方法,即全部在VBA中,或全部在
M
/Power Query中(可能需要更多的工作,但这意味着不需要VBA与Power Query对话,反之亦然)
- 让VBA代码将所有
currenturl
s(来自所有循环迭代)转储到特定范围/列,然后让Power Query查看该特定范围,为每个currenturl
返回一个M
表,然后合并并作为一个表加载到Excel工作表中。从技术上讲,一旦您进行了查询,您只需要刷新它(可以从VBA完成),但是进行查询需要了解M
或Power query GUI
您确定不能用XMLHTTP完成吗?您确定不能用XMLHTTP完成吗?谢谢chillin。我知道是这样的。我只是不知道这正是问题所在。谢谢你,齐林。我知道是这样的。我只是不知道这就是问题所在。