【发布时间】:2010-09-18 18:49:15
【问题描述】:
您好,
下面的 VBA 代码将创建一个 Excel QueryTable 对象并从 Range("D2") 开始显示它。这个目标范围的具体地址无关紧要。
我的问题是——是否可以手动将值输入到内存中的 Recordset,然后从中读取表?换句话说,我想在 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
【问题讨论】:
-
这是我最终使用的,除了它的 Web Query 版本,但据 Excel 所知,它是同一件事。您只需在运行 .Refresh 方法后删除查询表即可。