0

到目前为止,我只有一个工作正常的标准数据库连接(通过菜单或工具栏)。但是我想获取三个不同时期的记录(每张纸可以有不同的查询)。在提出这个之前,我做了各种尝试,但我无法通过宏获取任何记录。我正在寻找建议或方向来实现我的要求。

单元格 A1 =“名称”。

对于,sheet1:从 testDB 中选择“名称”

for,sheet2:从 testDB 中选择“名称”,其中数据 >= abc & 日期 <=xyz

对于,sheet3:从 testDB wehre 数据中选择“名称”> = xyx

4

2 回答 2

0

使用“开发人员”选项卡中的“记录宏”按钮记录您在使用所需参数创建此类连接时执行的所有操作。

然后停止录制并转到您的 VBA 屏幕,查看代码的外观,然后根据自己的喜好将其更改为您想要的位置,或者以这种方式录制所有三个版本。

现在将这些 VBA 代码集成到您的 VBA 脚本中。

于 2013-03-25T12:01:15.723 回答
0

尝试使用 ADODB 在代码中完成所有操作。

首先,在每张纸上,在单元格 A1(可能)中创建一个新的命名范围,称为:

“查询”和 xsheet.name

在该单元格中放置特定于该工作表的查询

然后在 VBA 代码模块中使用此代码:

sub getData()

dim cn as new adodb.connection
dim rs as new adodb.recordset

dim connStr as string ' connection string
dim sUDLFile as string ' path and name of Microsoft Data Link File (UDL FILE)
dim xSheet as worksheet

connStr="File Name=" & sUDLFile

cn.open connstr

'loop through all the worksheets
for each xSheet in thisworkbook.worksheets

    with rs
        ' open the connection to the db...
        .activeconnection=cn

        'get the query from the range on the worksheet!
        sQry=xsheet.range("Query" & xsheet.name).text

        ' open the query from the DB
        .open sQry

        ' dump the dataset onto the worksheet with one line of code in B5 cell!
        xsheet.range(B5).copyfromrecordset rs
        .close
    end with
next

' clean up and release memory
cn.close
set cn=nothing
set rs=nothing
'
end sub

在 MS Windows 资源管理器中创建连接字符串(UDL 文件):

  1. 导航到工作簿所在的目录
  2. 右键单击并选择新建...>Microsoft 数据链接。
  3. 将名称更改为好名称(可能是 name.udl)
  4. 双击新文件并设置设置以创建和测试与数据库的连接

有什么问题就问吧!

菲利普

于 2013-03-25T15:58:28.190 回答