Я пытаюсь создать Querytable, связанный со значением ячейки.
Создание Querytable работает нормально, мне удалось найти, как добавить параметр, но сейчас я не могу найти, как изменить инструкцию SQL.
Когда я запускаю приведенный ниже пример, он не генерирует ошибку, но если я изменяю значение в D1, я получаю сообщение «Нет значения для одного или нескольких обязательных параметров».
Sub AddParam()
Dim qt As QueryTable
Dim prm As Parameter
Set qt = ActiveSheet.QueryTables("705547512")
qt.Parameters.Delete 'reset params
Set prm = qt.Parameters.Add("dbk")
prm.SetParam xlRange, Sheet2.Range("D1")
prm.RefreshOnChange = True
qt.CommandText = "select top 10 * from [Ledger account entries$b8:l300] where Daybook = ?"
End Sub
The Querytableсамо запускается в D3.
Я также пытался запустить вышеупомянутое, используя where Daybook = dbk
, та же ошибка. Если я удалю предложение where
или использую константу (='somestring'
), я могу обновить QT без проблем.
Примечание: сам QT был создан с использованием этого фрагмента кода:
sConn = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;;Password=;User ID=Admin;Data Source=" & _
ThisWorkbook.FullName & ";" & _
"Mode=Share Deny Write;Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
Set qt = ActiveCell.Worksheet.QueryTables.Add(Connection:=sConn, Destination:=ActiveCell)
With qt
.CommandType = xlCmdSql
.CommandText = SQL
.Name = Int((1000000000 - 1 + 1) * Rnd + 1)
.RefreshStyle = xlOverwriteCells
.Refresh BackgroundQuery:=False
End With