在查询设置中引用暗淡的值时出现错误1004

时间:2019-10-11 12:03:15

标签: excel vba ms-access powerquery

我正在尝试使用单元格中的值对访问数据库运行Excel Power查询,但一直遇到错误。我通过VBA运行查询的经验接近于0,因此最终从宏记录器中获取了90%的代码,为造成的混乱感到抱歉。

我已经针对该值运行了msgboxes以确保它们正确提取了所有内容,但是我不确定我是否正确引用了暗淡的值。

Sub QueryMacro()
'
' QueryMacro Macro
'

Dim DayRange, MonthRange, YearRange As Range
Dim YR, MR, DR As String
Set DayRange = ThisWorkbook.Sheets(1).Range("A2")
Set MonthRange = ThisWorkbook.Sheets(1).Range("B2")
Set YearRange = ThisWorkbook.Sheets(1).Range("C2")
YR = YearRange.Value
MR = MonthRange.Value
DR = DayRange.Value


    ActiveWorkbook.Queries.Add Name:="Task Track", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Access.Database(File.Contents(""C:\Folder\Database_be.accdb""), [CreateNavigationProperties=true])," & Chr(13) & "" & Chr(10) & "    #""_Task Track"" = Source{[Schema="""",Item=""Task Track""]}[Data]," & Chr(13) & "" & Chr(10) & "    #""Filtered Rows"" = Table.SelectRows(#""_Task Track"", each [DTE] = #datetime(YR, MR, DR, 0, 0, 0))" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & _
        "" & Chr(10) & "    #""Filtered Rows"""
    Sheets.Add After:=ActiveSheet
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Task Track"";Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [Task Track]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = False
        .ListObject.DisplayName = "Task_Track"
        .Refresh BackgroundQuery:=False
    End With
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
End Sub

为澄清起见,此部分中会发生错误:

#""Filtered Rows"" = Table.SelectRows(#""_Task Track"", each [DTE] = #datetime(YR, MR, DR, 0, 0, 0))"

我尝试引用一个暗淡的值YR,而不是静态日期#datetime(2019,10,11,0,0,0)。

它返回“错误1004:[Expression.Error]导入YR与任何导出都不匹配。您是否错过了模块引用?”

据我了解,它试图在访问数据库中查找YR,而不是使用我暗化的YR值。

帮助?

1 个答案:

答案 0 :(得分:1)

连接变量。
认为不需要这些Chr(13)和Chr(10)代码。
我用撇号代替双引号。

声明为String可能不是问题,但是由于值实际上是数字,因此应该声明为Integer或Long。

Dim YR, MR, DR As String
DR = ThisWorkbook.Sheets(1).Range("A2")
MR = ThisWorkbook.Sheets(1).Range("B2")
YR = ThisWorkbook.Sheets(1).Range("C2")

    ActiveWorkbook.Queries.Add Name:="Task Track", Formula:="let" & _
        "Source = Access.Database(File.Contents('C:\Folder\Database_be.accdb'), [CreateNavigationProperties=true])," & _
        "#'_Task Track' = Source{[Schema='',Item='Task Track']}[Data]," & _
        "#'Filtered Rows' = Table.SelectRows(#'_Task Track', each [DTE] = #datetime(" & _
        YR & ", " & MR & ", " & DR & ", 0, 0, 0)) in #'Filtered Rows'"
    Sheets.Add After:=ActiveSheet
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location='Task Track';Extended Properties=''" _
        , Destination:=Range("$A$1")).QueryTable