VBA 查询中列名称内的方括号?

Square brackets inside the name of column in VBA query?

我尝试访问的列名称中的方括号有问题。
列名:[KPI] 标准交付能力 SO [<0/0] 这是我的代码:

Dim rs As New ADODB.Recordset
Dim query As String
Dim WhatToSelect as String

query = "Select " & WhatToSelect & " From" & sourceSheet & ".[Sheet1$]"
         rs.Open query, connection
         rs.MoveFirst
         i = rs.Fields(rs.Fields(0).name).Value

基本上我正在尝试查找变量,该变量位于“WhatToSelect”变量中

我试过:

WhatToSelect = "avg([[KPI] Standard Delivery Capability SO [<0/0]])"
WhatToSelect  =  "avg(`[KPI] Standard Delivery Capability SO [<0/0]`)"

到目前为止没有任何效果。
(它适用于所有其他列,其中没有 [ ])

找不到任何相关文档,所以我做了一些实验。我创建了一个小 table,其中包含一列,其中包含您的列名,执行了 Select * from [Sheet1$] 并查看了返回记录集中的列名。原来括号替换为括号:

Dim conn As ADODB.Connection, rs As ADODB.Recordset
Set conn = New ADODB.Connection
Dim connString As String
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES;"""
conn.Open connString
Set rs = conn.Execute("Select * from [Sheet1$]")

Dim i As Integer
For i = 0 To rs.Fields.Count
    Debug.Print rs.Fields(i).Name
Next

>> (KPI) Standard Delivery Capability SO (<0/0)

要查询该字段,您需要 (a) 用括号将字段名称括起来,并且 (b) 用圆括号替换字段名称中的括号:

dim fieldname as String, sql as String
fieldName = "[(KPI) Standard Delivery Capability SO (<0/0)]"

' Use field in result set:
sql = "Select " & fieldname & " from [Sheet1$]"
Set rs = conn.Execute(sql)

' Use field in Where-Clause:
sql = "Select * from [Sheet1$] where " & fieldname & " > 100"
Set rs = conn.Execute(sql)

在你的例子中,你想在那个字段上执行聚合函数,你需要指定

WhatToSelect = "avg([(KPI) Standard Delivery Capability SO (<0/0)])"