QueryTables.Add 方法 (Excel)

创建新的查询表。

语法

表达式添加 (连接目标Sql)

表达 一个代表 QueryTables 对象的变量。

参数

名称 必需/可选 数据类型 说明
Connection 必需 Variant 查询表的数据源。 可以是下列类型之一:
  • 一个包含 OLE DB 或 ODBC 连接字符串的字符串。 ODBC 连接字符串的格式为 ODBC;<connection string>
  • 一个 QueryTable 对象,该对象表示查询信息的初始复制源,包括连接字符串和 SQL 文本,但不包括 Destination 区域。 Specifying a QueryTable object causes the Sql argument to be ignored.
  • 一个 ADO 或 DAO Recordset 对象。 从 ADO 或 DAO 记录集中读取数据。 Microsoft Excel 会保留该记录集,直到该查询表被删除或 SQL 连接发生更改。 不能对产生的查询表进行编辑。
  • Web 查询。 窗体 URL;<url> 中的字符串,其中 URL; 是必需的,但未本地化,字符串的其余部分用于 Web 查询的 URL。
  • 数据查找程序。 窗体 FINDER;<data finder file path> 中的字符串,其中 FINDER; 是必需的,但未本地化。 字符串的其余部分为数据查找程序文件(*.dqy 或 *.iqy)的路径和名称。 运行 Add 方法时读取文件;对查询表的 Connection 属性的后续调用将返回以 或 URL; 开头的ODBC;字符串(视情况而定)。
  • 一个文本文件。 窗体 TEXT;<text file path and name> 中的字符串,其中 TEXT; 是必需的,但未本地化。
目标 必需 Range 查询表目标区域(生成的查询表的放置区域)左上角的单元格。 目标区域必须位于包含表达式指定的 QueryTables 对象的工作表中。
Sql 可选 Variant 在 ODBC 数据源上运行的 SQL 查询字符串。 使用 ODBC 数据源时,此参数是可选的 (如果未在此处指定此参数,则应在刷新表) 之前使用查询表的 Sql 属性对其进行设置。 将 QueryTable 对象、文本文件或 ADO/DAO Recordset 对象指定为数据源时,不可使用此参数。

返回值

一个代表新查询表的 QueryTable 对象。

备注

在调用 Refresh 方法之前,此方法创建的查询不会运行。

示例

本示例基于 ADO 记录集创建查询表。 为了向后兼容,此示例保留了现有的列排序和筛选设置以及布局信息。

Dim cnnConnect As ADODB.Connection 
Dim rstRecordset As ADODB.Recordset 
 
Set cnnConnect = New ADODB.Connection 
cnnConnect.Open "Provider=SQLOLEDB;" & _ 
    "Data Source=srvdata;" & _ 
    "User ID=testac;Password=4me2no;" 
 
Set rstRecordset = New ADODB.Recordset 
rstRecordset.Open _ 
    Source:="Select Name, Quantity, Price From Products", _ 
    ActiveConnection:=cnnConnect, _ 
    CursorType:=adOpenDynamic, _ 
    LockType:=adLockReadOnly, _ 
    Options:=adCmdText 
 
With ActiveSheet.QueryTables.Add( _ 
        Connection:=rstRecordset, _ 
        Destination:=Range("A1")) 
    .Name = "Contact List" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .BackgroundQuery = True 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = True 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .PreserveColumnInfo = True 
    .Refresh BackgroundQuery:=False 
End With

此示例向新的查询表中导入固定宽度的文本文件。 该文本文件的第一列为 5 个字符宽,作为文本导入。 第二列为四个字符宽度,被跳过。 其余部分则导入第三列中,并对其应用常规格式。

Set shFirstQtr = Workbooks(1).Worksheets(1) 
Set qtQtrResults = shFirstQtr.QueryTables.Add( _ 
    Connection := "TEXT;C:\My Documents\19980331.txt", 
    Destination := shFirstQtr.Cells(1,1)) 
With qtQtrResults 
    .TextFileParsingType = xlFixedWidth 
    .TextFileFixedColumnWidths := Array(5,4) 
    .TextFileColumnDataTypes := _ 
        Array(xlTextFormat, xlSkipColumn, xlGeneralFormat) 
    .Refresh 
End With

此示例在活动工作表上新建查询表。

sqlstring = "select 96Sales.totals from 96Sales where profit < 5" 
connstring = _ 
    "ODBC;DSN=96SalesData;UID=Rep21;PWD=NUyHwYQI;Database=96Sales" 
With ActiveSheet.QueryTables.Add(Connection:=connstring, _ 
        Destination:=Range("B1"), Sql:=sqlstring) 
    .Refresh 
End With

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。