Подача объекта Excel QueryTable из памяти - PullRequest
0 голосов
/ 23 октября 2008

Привет,

Приведенный ниже код VBA создаст объект Excel QueryTable и отобразит его, начиная с диапазона («D2»). Конкретный адрес этого целевого диапазона не имеет значения.

У меня вопрос - можно ли вручную вводить значения в набор записей в памяти, а затем читать таблицу из него? Другими словами, я хочу указать столбцы таблицы и значения в VBA, а не чтобы они исходили из базы данных или файла.

Public Sub Foo()

    Dim blah As QueryTable
    Dim rngTarget As Range

    Dim strQuery As String

    strQuery = "SELECT * FROM MY_TABLE"
    Set rngTarget = Range("D2")
    Dim qt As QueryTable
    Set qt = rngTarget.Worksheet.QueryTables.Add(Connection:= _
        "ODBC;DRIVER=SQL Server;SERVER=MY_SQL_SERVER;APP=MY_APP;Trusted_Connection=Yes", Destination:=rngTarget)

    With qt
        .CommandText = strQuery
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .Name = "MY_RANGE_NAME"
        .MaintainConnection = False
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = False
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .PreserveColumnInfo = False
        .Refresh BackgroundQuery:=False
   End With

End Sub

Ответы [ 2 ]

2 голосов
/ 30 октября 2008

Да, конечно.

  Dim vConnection As Variant, vCommandText As Variant
  Dim r As ADODB.Recordset
  Dim i As Long

  'Save query table definition
  vConnection = QueryTable.Connection
  vCommandText = QueryTable.CommandText


  Set r = New ADODB.Recordset
  <populate r>

  Set QueryTable.Recordset = r
  QueryTable.Refresh False

  'Restore Query Table definition
  Set QueryTable.Recordset = Nothing
  QueryTable.Connection = vConnection
  QueryTable.CommandText = vCommandText
0 голосов
/ 24 октября 2008

Из справки Excel VB Параметр подключения может быть:

«Объект набора записей ADO или DAO. Данные считываются из набора записей ADO или DAO. Microsoft Excel сохраняет набор записей до тех пор, пока таблица запросов не будет удалена или соединение не будет изменено. Результирующую таблицу запросов нельзя редактировать»

Так что да, похоже, вы можете это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...