Импортирайте данни от затворена работна книга (ADO), използвайки VBA в Microsoft Excel

Anonim

Ако искате да импортирате много данни от затворена работна книга, можете да направите това с ADO и макроса по -долу.
Ако искате да извлечете данни от друг работен лист от първия работен лист в затворената работна книга,
трябва да се обърнете към потребителски дефиниран диапазон. Макросът по -долу може да се използва по този начин (в Excel 2000 или по -нова версия):

GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "A1: B21", ActiveCell, False GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "MyDataRange", Range ("SubCromFased, String, SourceRange As String, _ TargetRange As Range, IncludeFieldNames As Boolean) "изисква препратка към библиотеката на обекти на данни на Microsoft ActiveX", ако SourceRange е препратка към диапазон: "това ще върне данни от първия работен лист в SourceFile", ако SourceRange е дефинирано позоваване на име: „това ще върне данни от всеки работен лист в SourceFile“ SourceRange трябва да включва заглавките на диапазона „Dim dbConnection As ADODB.Connection, rs Като ADODB.Recordset Dim dbConnectionString As String Dim TargetCell As Range, i As Integer dbConnectionString =" DR = {Драйвер на Microsoft Excel (*.xls)}; " & _ "ReadOnly = 1; DBQ =" & SourceFile Set dbConnection = New ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString 'отворете връзката към базата данни Set rs = dbConnection.Execute ("[" & SourceRange & "] TargetCell = TargetRange.Cells (1, 1) If IncludeFieldNames Тогава за i = 0 За rs.Fields.Count - 1 TargetCell.Offset (0, i). Formula = rs.Fields (i). Име Следващо Задайте TargetCell = TargetCell .Offset (1, 0) End If TargetCell.CopyFromRecordset rs rs.Close dbConnection.Close 'затворете връзката към базата данни Set TargetCell = Нищо не е зададено rs = Нищо не е зададено dbConnection = Нищо при грешка GoTo 0 Излезте от Sub InvalidInput: MsgBox "Изходният файл или диапазонът на източника е невалиден! ", _ vbExclamation," Вземете данни от затворена работна книга "Край на подс

Друг метод, който не използва метода CopyFromRecordSet С макроса по-долу можете да извършите импортирането и да имате по-добър контрол върху резултатите, върнати от RecordSet.

Sub TestReadDataFromWorkbook () 'попълва данни от затворена работна книга в активната клетка Dim tArray As Variant, r As Long, c As Long tArray = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: B21")' без транспониране „For r = LBound (tArray, 2) To UBound (tArray, 2)“ For c = LBound (tArray, 1) To UBound (tArray, 1) “ActiveCell.Offset (r, c). c, r) 'Next c' Next r 'с транспониране tArray = Application.WorksheetFunction.Transpose (tArray) За r = LBound (tArray, 1) Към UBound (tArray, 1) За c = LBound (tArray, 2) Към UBound (tArray, 2) ActiveCell.Offset (r - 1, c - 1) .Formula = tArray (r, c) Следващ c Следващ r Краен под частна функция ReadDataFromWorkbook (SourceFile As String, SourceRange As String) As Variant 'изисква препратка към библиотеката на Microsoft ActiveX Data Objects ', ако SourceRange е препратка към диапазон:' тази функция може да връща данни само от първия работен лист в SourceFile ', ако SourceRange е дефинирана референтна име:' тази функция може да връща данни от всеки работен лист в SourceFile 'SourceRange трябва да включва примерите на заглавките на диапазони:' varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: A21") 'varRecordSetData = ReadDataFromWorkmeNameName: "C: xls "," A1: B21 ") 'varRecordSetData = ReadDataFromWorkbook (" C: \ Име на папката \ SourceWbName.xls "," DefinedRangeName ") Dim dbConnection Като ADODB.Connection, rs As ADODB.Recordset Dim dbC {Microsoft Excel Driver (*.xls)}; ReadOnly = 1; DBQ = "& SourceFile Set dbConnection = New ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString 'отворете набора за връзка с базата данни rs = dbConnection.Execute (" & SourceRange & "]") При грешка GoTo 0 ReadDataFromWorkbook = rs.GetRows 'връща двуцветен масив с всички записи в rs rs. Излезте от функцията InvalidInput: MsgBox "Изходният файл или диапазонът на източника е невалиден! ", vbExclamation," Получаване на данни от затворена работна книга "Задайте rs = Нищо не задайте dbConnection = Нищо Крайна функция

Примерът за макрос предполага, че вашият VBA проект е добавил препратка към библиотеката с обекти на ADO.
Можете да направите това от VBE, като изберете менюто Инструменти, Препратки и изберете Microsoft
ActiveX Data Objects x.x Object Library.
Използвайте ADO, ако можете да избирате между ADO и DAO за импортиране или експортиране на данни.