Uvozite podatke iz zaprtega delovnega zvezka (ADO) z uporabo VBA v Microsoft Excelu

Anonim

Če želite uvoziti veliko podatkov iz zaprtega delovnega zvezka, lahko to storite z ADO in spodnjim makrom.
Če želite pridobiti podatke z drugega delovnega lista, kot je prvi delovni list v zaprtem delovnem zvezku,
sklicevati se morate na uporabniško določeno imenovano območje. Spodnji makro lahko uporabite tako (v Excelu 2000 ali novejšem):

GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "A1: B21", ActiveCell, False GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "MyDataRange", Razpon ("SubComFased, String, SourceRange As String, _ TargetRange As Range, IncludeFieldNames As Boolean) "zahteva sklic na knjižnico Microsoftovih podatkovnih objektov ActiveX", če je SourceRange sklic na obseg: "to bo vrnilo podatke iz prvega delovnega lista v SourceFile", če je SourceRange opredeljena referenca imena: 'to bo vrnilo podatke iz katerega koli delovnega lista v datoteki SourceFile' SourceRange mora vključevati glave obsega 'Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset Dim dbConnectionString As String Dim TargetCell As Range, i As Integer dbConnectionString = "DR = {Gonilnik Microsoft Excel (*.xls)}; " & _ "ReadOnly = 1; DBQ =" & SourceFile Set dbConnection = New ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString 'open the database connection Set rs = dbConnection.Execute ("[" & SourceRange & "] TargetCell = TargetRange.Cells (1, 1) If IncludeFieldNames Potem za i = 0 Za rs.Fields.Count - 1 TargetCell.Offset (0, i). Formula = rs.Fields (i). Naslednje ime Nastavim TargetCell = TargetCell .Offset (1, 0) End If TargetCell.CopyFromRecordset rs rs.Close dbConnection.Close 'zaprite povezavo z bazo podatkov Set TargetCell = Nič nastavljeno rs = Nič nastavljeno dbConnection = Nič Napaka GoTo 0 Zapri Sub InvalidInput: MsgBox "Izvorna datoteka ali izvorni obseg je neveljaven! ", _ vbExclamation," Pridobite podatke iz zaprtega delovnega zvezka "Konec pod

Druga metoda, ki ne uporablja metode CopyFromRecordSet S spodnjim makrom lahko izvedete uvoz in imate boljši nadzor nad rezultati, vrnjenimi iz RecordSet.

Sub TestReadDataFromWorkbook () 'zapolni podatke iz zaprtega delovnega zvezka v aktivni celici Dim tArray As Variant, r As Long, c As Long tArray = ReadDataFromWorkbook ("C: \ Ime mape \ SourceWbName.xls", "A1: B21")' brez prenosa 'Za r = LBound (tArray, 2) V UBound (tArray, 2)' For c = LBound (tArray, 1) V UBound (tArray, 1) 'ActiveCell.Offset (r, c). c, r) 'Naprej c' Naprej r 's prenosom tArray = Application.WorksheetFunction.Transpose (tArray) For r = LBound (tArray, 1) V UBound (tArray, 1) Za c = LBound (tArray, 2) V UBound (tArray, 2) ActiveCell.Offset (r - 1, c - 1) .Formula = tArray (r, c) Naprej c Naprej r Končaj Sub Zasebna funkcija ReadDataFromWorkbook (SourceFile As String, SourceRange As String) As Variant 'zahteva referenco v knjižnico Microsoftovih podatkovnih objektov ActiveX ", če je SourceRange sklic na obseg:" ta funkcija lahko vrne podatke samo s prvega delovnega lista v SourceFile ", če je SourceRange opredeljeno referenčno ime:" ta funkcija lahko vrne podatke iz m kateri koli delovni list v datoteki SourceFile 'SourceRange mora vsebovati primere naslovov obsega:' varRecordSetData = ReadDataFromWorkbook ("C: \ Ime mape \ SourceWbName.xls", "A1: A21") 'varRecordSetData = ReadDataFromWorkBarmeName: "C: xls "," A1: B21 ") 'varRecordSetData = ReadDataFromWorkbook (" C: \ Ime mape \ SourceWbName.xls "," DefinedRangeName ") Dim dbConnection Kot ADODB.Connection, rs As ADODB.Recordset Dimc dbC {Gonilnik Microsoft Excel (*.xls)}; ReadOnly = 1; DBQ = "& SourceFile Set dbConnection = New ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString 'open the database connection Set rs = dbConnection.Execute (" & SourceRange & "]") On Error GoTo 0 ReadDataFromWorkbook = rs.GetRows 'vrne dvoslojno matriko z vsemi zapisi v rs rs. Izhodna funkcija InvalidInput: MsgBox "Izvorna datoteka ali izvorni obseg ni veljaven! ", vbExclamation," Pridobite podatke iz zaprtega delovnega zvezka "Nastavi rs = Nič Nastavi dbConnection = Nič Končaj funkcijo

Primer makra predvideva, da je vaš projekt VBA dodal sklic na knjižnico objektov ADO.
To lahko storite znotraj VBE tako, da izberete meni Orodja, Reference in izberete Microsoft
Knjižnica predmetov ActiveX Data Objects x.x Object.
Uporabite ADO, če lahko izbirate med ADO in DAO za uvoz ali izvoz podatkov.