从内存中提供Excel QueryTable对象

问候,

下面的VBA代码将创build一个Excel QueryTable对象,并在范围(“D2”)上开始显示它。 这个目标范围的具体地址是不重要的。

我的问题是 – 是否有可能手动将值送入内存中的logging集,然后从中读取表? 换句话说,我想在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 

是的,当然。

  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 

从Excel VB帮助连接参数可以是:

“一个ADO或DAO Recordset对象,从ADO或DAOlogging集中读取数据,Microsoft Excel保留logging集,直到查询表被删除或连接改变为止,结果查询表不能被编辑”

所以是的,看起来你可以做到这一点。