在两个Excel文件之间传递数据而无须打开Excel文件

原创 范吉 完美Excel 2018-10-11

经常有人需要从关闭的工作簿文件中取值,省掉打开工作簿的操作。而此处介绍的技巧,所涉及到的工作簿文件都不需要打开,就可以完成将某工作簿文件中的数据迁移到指定的工作簿文件中。

因为要使用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所示。

(0)

相关推荐