Excel VBA QueryTable.Commandtext - 从[变量]中选择* - (访问数据库)

问题描述 投票:0回答:1

我正在尝试根据某些输入值提取访问查询。 拉出正确的查询是可行的,但它会卡在标记位置,因为它不接受变量,只是按原样写出来。

有没有人知道的解决方法?

Dim BDMA As String
BDMA = Me.ListBDMA.Value
ActiveWorkbook.Queries.Add Name:=BDMA, Formula:= _
    "let" & Chr(13) & "" & Chr(10) & "    Quelle = Access.Database(File.Contents(""X:\Pierburg\Berlin\_Common\010 Standort Berlin\300 Datenbanken\Schichtbericht.accdb""), [CreateNavigationProperties=true])," _
    & Chr(13) & "" & Chr(10) & "    #""_Band 3"" = Quelle{[Schema="""",Item=" & BDMA & "]}[Data]" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""_Band 3"""
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
    "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location="" & BDMA & "";Extended Properties=""""" _
    , Destination:=Range("$A$5")).QueryTable
    .CommandType = xlCmdSql
    .CommandText = Array("SELECT * FROM [" & BDMA & "]") '<----- Here is the Problem ----------
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = False
    .ListObject.DisplayName = "Band_3"
    .Refresh BackgroundQuery:=False
End With
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

问候

错误说:

未找到查询“& BDMA &”。

这表明我不能使用这样的变量。有什么想法吗? 我还尝试事先创建一个数组并使用它,但这也不起作用。

excel vba ms-access variables ms-access-query
1个回答
0
投票

问题来了

 .CommandText = Array("SELECT * FROM [" & BDMA & "]")

确实如此。这里的

Array()
功能不需要也没有帮助。这意味着代码将尝试将字符数组而不是字符串分配给
CommandText
属性,而您需要一个字符串。所以它看起来就像这样:

 .CommandText = "SELECT * FROM [" & BDMA & "]"

可能还有其他问题,但从这里开始。

© www.soinside.com 2019 - 2024. All rights reserved.