不如你这样:
1、把两个文件放在同一个文件夹中,
2、重新导入数据,
3、在“导入外部数据--数据区域属性”中在“打开工作簿时,自动刷新”前画勾,
这样当你移动文件夹后,再打开Excel文件时,会d出是否自动刷新对话框,点“自动刷新”后,会d出“找不到文件,但建议链接同一文件夹下的MDB文件”,然后点确定就ok了。。。。
这样做的后果是每次打开Excel文件都会重新链接文件,但是可以接近你的要求。
不知道你明白了没?使用
ADO
连接到
Excel
ADO
使用
MDAC
中以下两个
OLE
DB
提供程序中的任何一个都可以连接到
Excel
数据文件。
Microsoft
Jet
OLE
DB
Provider
—
或
—
Microsoft
OLE
DB
Provider
for
ODBC
Drivers
如何使用
Microsoft
Jet
OLE
DB
Provider
Jet
提供程序只需要两条信息就可以连接到
Excel
数据源:路径(包括文件名),和
Excel
文件版本。
Jet
提供程序使用连接字符串
Dim
cn
as
ADODBConnection
Set
cn
=
New
ADODBConnection
With
cn
Provider
=
"MicrosoftJetOLEDB40"
ConnectionString
=
"Data
Source=C:\MyFolder\MyWorkbookxls;"
&
_
"Extended
Properties=Excel
80;"
Open
End
With
提供程序版本:必须使用
Jet
40
提供程序;Jet
351
提供程序不支持
Jet
ISAM
驱动程序。如果指定了
Jet
351
提供程序,在运行时会出现以下错误信息:
Couldn't
find
installable
ISAM
Excel
版本:对于
Excel
95
工作簿(Excel
版本
70),应指定
Excel
50;对于
Excel
97、Excel
2000
或
Excel
2002
(XP)
工作簿(Excel
版本
80、90
和
100),应指定
Excel
80
版本。
使用“数据链接属性”对话框的
Jet
提供程序
如果在应用程序中使用“ADO
数据控件”或“数据环境”,就会出现数据链接属性对话框来收集必要的连接设置。
在提供程序选项卡上,选择
Jet
40
提供程序;Jet
351
提供程序不支持
Jet
ISAM
驱动程序。如果指定了
Jet
351
提供程序,在运行时会出现以下错误信息:
Couldn't
find
installable
ISAM
在连接选项卡上,浏览到您的工作簿文件。忽略“用户
ID”和“密码”项,因为这些不适用于
Excel
连接。(无法打开受密码保护的
Excel
文件作为数据源。本文后面有关于此主题的详细信息。)
在所有选项卡上,从列表中选择扩展属性,然后单击编辑值。输入
Excel
80;,用分号
(;)
将其与任何其他已有的项分隔。如果忽略此步骤,测试连接时将出现一条错误信息。这是因为,如果不另行指定,Jet
提供程序期望
Microsoft
Access
数据库。
返回到连接选项卡,并单击
测试连接。将出现一个消息框,通知您测试已成功完成。ado 读写excel 设置格式比较简洁,总体来说分以下几步:
1定义“AdodbConnection”对象myCN;
2使用对象OPEN函数连接文档;
3使用对象Execute函数执行SQL语句,并返回查询结果。
4将查结果拷贝到EXCEL中。
另外有两个点多说两句,OPEN函数的连接字符串和表头。
OPEN函数的连接字符串:
"Provider=MicrosoftACEOLEDB120; Data Source=" & FilePath & "; Extended Properties='Excel 120; HDR=YES; IMEX=3'" 'HDR 是否有表头;IMEX,013,写读读写
字符串除了写明软件版本,就两个参数,HDR是否有表头,IMEX申明读写方式,0是写入,1是读出,3是读写;(网上有很多教程写的参数值为2是“读写”,个人测试应该是3)
表头:
表头 *** 作需要使用到反馈结果对象(记录集)的Fields函数,实际上就是表头数组,Count返回表头数量(即列数或者说是字段数量),name返回具体表头文本值。
SQL语句可参考相关教程,在此不再赘述。
说了这么多,还是大家自己 *** 作吧,对了ADO支持 *** 作文档本身,所以可以使用EXCEL的第一个sheet作为输出页,第二个sheet作为数据库页面,以下附件文件即是如此。在EXCEL2016下做的测试,希望能帮助到你。是根据第一行的工作簿名称批量获取数据并在第二行自动填写对应工作表的名称(每个工作簿只含一个表)。运行代码前数据请注意备份!!
Sub test()
Dim cnn As Object
Dim strPath, strTable, strSQL, Z As String, ss$, shtName As String
Dim x%, i%
Set cnn = CreateObject("ADODBConnection")
x = [xfd1]End(xlToLeft)Column '取得第一行最右侧单元格对应的列号,计算要获取的工作簿数量
Rows("2:25")Clear '清空数据存放区域的旧数据
For i = 1 To x
Z = Dir("D:\DATA\DATA" & "\xlsx")
'建立连接,提取数据
ss = Cells(1, i)Value & "xlsx"
Do While Z <> ""
If Z = ss Then
strPath = "D:\DATA\DATA" & "\" & Z
cnnOpen "provider=MicrosoftACEOLEDB120;Extended properties='Excel 120;hdr=No;imex=1';data source=" & strPath
Set rst = cnnOpenSchema(20)
shtName = rstFields("TABLE_NAME")Value '获取TABLE类型记录表的名称
strTable = "[" & shtName & "A1:A18]"
strSQL = "select F1 from " & strTable'获取table表第一列数据
Cells(3, i)CopyFromRecordset cnnExecute(strSQL)
Cells(2, i) = Left(shtName, Len(shtName) - 1)'去除表名中的$符号
cnnClose
End If
Z = Dir
Loop
Next i
Set cnn = Nothing
End Sub代码如下: *** 作 book1xls 的 sheet1 工作表,注意要写成 sheet1$ (加个美元符号)
Dim adoConnection As New ADODBConnection
Dim adoRecordset As New ADODBRecordset
'OLE DB + ODBC Driver 方式:
'adoConnectionOpen "Data Provider=MSDASQL1;driver=Microsoft Excel Driver (xls);DBQ=cbook1xls"
'MicrosoftJetOLEDB40 方式,(建议)
adoConnectionOpen "Provider=MicrosoftJetOLEDB40;Persist Security Info=False;" & _
"Data Source=c:book1xls;Extended Properties='Excel 80;HDR=Yes'"
adoRecordsetOpen "select from [sheet1$]", adoConnection, adOpenKeyset, adLockOptimistic
DebugPrint adoRecordsetRecordCount
Dim i As Integer
Do Until adoRecordsetEOF
For i = 0 To adoRecordsetFieldsCount - 1
DebugPrint adoRecordsetFieldsItem(i)Name
DebugPrint adoRecordsetFieldsItem(i)Value
Next i
adoRecordsetMoveNext
Loop
构造ConnectionString时,OLEDB的提供者要选择MicrosoftJet40OLEDBProvider作为ADO的驱动程序。这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件。连接的数据库名称当然就是你要打开的Excel文件,注意扩展名是xls,而不是mdb,如c:book1xls最关键的一点是,还要设置扩展属性ExtendedProperties为"Excel80",否则,测试连接时会报告无法识别数据格式的错误。HDR是指明有没有标题头,默认就是"Yes",所以这里也可以不写
'注: OLE DB + ODBC Driver 方式不支持以下语句,但 MicrosoftJetOLEDB40 方式支持!adoConnectionExecute "insert into [sheet1$](姓名) values(3)"adoRecordsetAddNew Array("姓名", "性别", "年龄", "地址"), Array(1, 2, 3, 4)
以上就是今天分享的“VB采用ADO方式 *** 作EXCEL表格的 *** 作步骤”,希望大家有所收获。
excel中出现 “跨book引用不能过引用到本文件”是设置错误造成的,解决方法为:
1、统计前3个月的数据到汇总表中,实现跨表引用数据和计算。
2、在汇总表中的B2单元格输入:“='1月'!B2+'2月'!B2+'3月'!B2”,分布点击各表B2单元格,并“+”,即可实现引用求和。
3、然后双击B2单元格右下角,可实现其他项的汇总计算。
4、可直接使用双击或下拉。可使用sumif解决不规律,公式虽长,但很好写。
5、数据汇总统计,只要点击关联到对应表即可进行跨表引用计算,“!前表示表名,后表示对应的单元格”。
Excel表格设置引用多个工作表数据的方法1如图,要汇总各供应商各个月份洗衣粉的数量。
如果通过工作表找到D2单元格洗衣液的数量,然后把它一个一个加起来,工作量太大。方法如图所示。
2如图,在汇总表中,在单元格中输入公式=sum(
3如图,然后点击A供应商所在工作表(步骤1),点击一月份的数量D2单元格(步骤2)。
4如图,这时按住shift不放(步骤1),然后点击最后一张工作表:F供应商(步骤2)。
5如图,这时松开shift,点击enter。这时就汇总各供应商各个月份洗衣粉的数量。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)