2、其次在d出的引用窗口中,找到MicrosoftActiveXDataObjects6.1Library和MicrosoftActiveXDataObjectsRecordset2.8Library。
3、最后把前面的框勾选上,点击确定即vba数据库连接成功。
这个似乎无法直接判断用 Selection.QueryTable.Refresh BackgroundQuery:=False 禁止后台异步刷新是否有用?
如果不行,好像只能用循环去判断一个每次刷新后确定会改变的值
VBA连接
SQL
SERVER
数据库
实例:
Dim
strConn
As
String,
strSQL
As
String
Dim
conn
As
ADODB.Connection
Dim
ds
As
ADODB.Recordset
Dim
col
As
Integer
'连接数据库的字符串
strConn
=
"Provider=SQLOLEDB.1Persist
Security
Info=TrueUser
ID=[user]Password=[password]Initial
Catalog=[database]Data
Source=[数据库IP地址或数据库服务器名称]Connect
Timeout=720
"
'查询语句,如果sql语句很长可以用strSQL=strSQL+来连接分成多段的语句,如果语句很短可以只写在一行上。
strSQL
=
"select
*
from
Hy_KPI_Shop_Dept_WeekRpt
"
strSQL
=
strSQL+"where
sdate='2014-01-01'
order
by
sdate,shopid
"
Set
conn
=
New
ADODB.Connection
Set
ds
=
New
ADODB.Recordset
'打开数据库连接
conn.Open
strConn
'该句和数据库连接字符串处的Connect
Timeout=720,表示说如果语句运行时间很长,这两句可以延长vba的等待时间,没有这两句,vba往往会报查询超时。
conn.CommandTimeout
=
720
With
ds
'根据查询语句获得数据
.Open
strSQL,
conn
'自动控制加入所有列标题
For
col
=
0
To
ds.Fields.Count
-
1
'请注意Offset(0,
col)中的参数一定要正确,该句表示标题将会写在第一行,从A1单元格开始,如果不想写入标题行,可将下面这句注释掉。
Worksheets("门店各课KPI周报").Range("A1").Offset(0,
col).Value
=
ds.Fields(col).Name
Next
'加入所有行数据,该句表示查询结果将会写在第一行,从A1单元格开始,但是由于标题行写在第一行了,所以实际这一行从标题下的一行写入。
Worksheets("sheet1").Range("A1").Offset(1,
0).CopyFromRecordset
ds
End
With
'关闭数据库连接和清空资源
Set
ds
=
Nothing
conn.Close
Set
conn
=
Nothing
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)