2008-10-23 42 views
0

问候,喂养的Excel QueryTable对象从存储器

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 
+0

这就是我最终要做的,除了它的Web查询版本,但据Excel知道它是同样的事情。运行.Refresh方法后,您只需删除查询表。 – AlanR 2009-01-12 19:04:11

回答

2

是的,当然。

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

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

“的ADO或DAO Recordset对象数据从ADO或DAO记录读取Microsoft Excel中保留记录,直到查询表被删除或连接被改变,产生的查询表不能被编辑“

所以是的,它看起来像你可以做到。