Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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 Web查询引发错误:导入currenturl与没有导出匹配。你错过了模块参考吗?_Excel_Vba - Fatal编程技术网

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。我知道是这样的。我只是不知道这正是问题所在。谢谢你,齐林。我知道是这样的。我只是不知道这就是问题所在。