在两个Excel文件之间传递数据而无须打开Excel文件
经常有人需要从关闭的工作簿文件中取值,省掉打开工作簿的操作。而此处介绍的技巧,所涉及到的工作簿文件都不需要打开,就可以完成将某工作簿文件中的数据迁移到指定的工作簿文件中。
因为要使用ADO技术,所以首先需要设置对以下两个库的引用:
1. Microsoft ActiveX数据对象
2.x库2. Microsoft ActiveX数据对象记录集2.x库
在VBE中,校准菜单“工具-引用”,在“引用”替代中,找到并选择上述两个库,如下图1所示。
图1
在VBE中,输入下面的代码:
Sub TransferDataBetweenExcelFiles(strInputFileFullName As String,_
strOutputFileFullName作为字符串,_
strInputSheetName作为字符串)
Dim adoConnection作为新的ADODB.Connection
Dim adoRcdSource作为新的ADODB.Recordset
Dim strProvider作为字符串
昏暗的strExtProperties作为字符串
昏暗的strFileExt作为字符串
如果Len(Dir(strInputFileFullName))= 0然后
MsgBox“要转移数据的源文件不存在。”
退出子
万一
strFileExt = Mid(strOutputFileFullName,_
InStrRev(strOutputFileFullName,“。”,_
-1,vbTextCompare),_
Len(strOutputFileFullName))
如果strFileExt =“ .xlsx”,则
strExtProperties =“ Excel 12.0XML”
别的
strExtProperties =“ Excel8.0”
万一
如果CDbl(Application.Version)> 11然后
strProvider =“ Microsoft.ACE.OLEDB.12.0”
别的
strProvider =“ Microsoft.JET.OLEDB.4.0”
万一
adoConnection.Open“ Provider =”&strProvider&“; Data Source =”&_
strOutputFileFullName&“;扩展属性=”“”&_
strExtProperties&“; HDR = YES”“;”
adoRcdSource.Open从[“&_打开” Select * into [“&strInputSheetName&”]
strInputSheetName&“ $] IN'”&strInputFileFullName&_
“'[”&strExtProperties&“; HDR = YES;]”,adoConnection
adoConnection.Close
设置adoRcdSource = Nothing
设置adoConnection = Nothing
结束子
假设C盘中存在一个称为“源文件.xlsx ”的工作簿,下面是测试代码,
子测试()
TransferDataBetweenExcelFiles“ C:\源文件.xlsx”,“ C:\目标文件.xlsx”,“ Sheet1”
结束子
运行后,将“源文件.xlsx ”工作簿工作表Sheet1中的数据移至称为“目标文件.xlsx ”的工作簿,如下图2所示。
图2
注意,“源文件.xlsx ”工作簿一定要存在,但“目标文件.xlsx ”工作簿不一定需要存在。如果“目标文件.xlsx ”工作簿不存在,则创建该工作簿并获取“源文件.xlsx ”工作簿指定迁移的工作表,如上图2所示。