Ошибка 1004 при ссылке на затемненное значение в настройках запроса - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь выполнить мощный запрос Excel к базе данных доступа, используя значения из ячейки, но продолжаю сталкиваться с ошибкой. У меня почти 0 опыта работы с запросами через VBA, поэтому в итоге я получил 90% кода из устройства записи макросов, поэтому извиняюсь за беспорядок.

Я запустил msgbox по значению, чтобы убедиться, что онивсе правильно вытаскиваю, я просто не уверен, правильно ли я ссылаюсь на затемненные значения.

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))"

где вместо статической даты #datetime (2019, 10, 11, 0, 0, 0) я пытаюсь сослаться на затемненное значение YR.

Возвращается с ошибкой 1004: [Expression.Error] Импортированный YR не соответствует экспорту. Вы пропустили ссылку на модуль? "

Насколько я понимаю, он пытается найти YR в базе данных доступа вместо использования значения YR, которое я затемнил.

Помощь?

1 Ответ

1 голос
/ 11 октября 2019

Объединенные переменные.
Не думайте, что нужны эти коды 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...