Importați date dintr-un registru de lucru închis (ADO) utilizând VBA în Microsoft Excel

Anonim

Dacă doriți să importați multe date dintr-un registru de lucru închis, puteți face acest lucru cu ADO și macro-ul de mai jos.
Dacă doriți să extrageți date dintr-o altă foaie de lucru decât prima foaie de lucru din registrul de lucru închis,
trebuie să vă referiți la un interval numit definit de utilizator. Macro-ul de mai jos poate fi folosit astfel (în Excel 2000 sau o versiune ulterioară):

" String, SourceRange As String, _ TargetRange As Range, IncludeFieldNames As Boolean) "necesită o referință la biblioteca Microsoft ActiveX Data Objects" dacă SourceRange este o referință de interval: "aceasta va returna datele din prima foaie de lucru din SourceFile" dacă SourceRange este un referință de nume definit: 'aceasta va returna date din orice foaie de lucru în SourceFile' SourceRange trebuie să includă antetele intervalului 'Dim dbConnection ca ADODB.Connection, rs Ca ADODB.Recordset Dim dbConnectionString As String Dim TargetCell As Range, i As Integer dbConnectionString = "DRIVER = {Driver 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 & "]") Set TargetCell = TargetRange.Cells (1, 1) Dacă IncludeFieldNames Atunci pentru i = 0 To rs.Fields.Count - 1 TargetCell.Offset (0, i) .Formula = rs.Fields (i) .Name Next i Set TargetCell = TargetCell .Offset (1, 0) End If TargetCell.CopyFromRecordset rs rs.Close dbConnection.Close 'close the database connection Set TargetCell = Nothing Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Exit Sub InvalidInput: MsgBox "Fișierul sursă sau intervalul sursă este nevalid! ", _ vbExclamation," Obțineți date din registrul de lucru închis "End Sub

O altă metodă care nu folosește metoda CopyFromRecordSet Cu macro-ul de mai jos puteți efectua importul și puteți avea un control mai bun asupra rezultatelor returnate din RecordSet.

Sub TestReadDataFromWorkbook () 'completează datele dintr-un registru de lucru închis în celula activă Dim tArray As Variant, r As Long, c As Long tArray = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: B21")' fără a transpune „Pentru r = LBound (tArray, 2) Pentru UBound (tArray, 2)„ Pentru c = LBound (tArray, 1) To UBound (tArray, 1) „ActiveCell.Offset (r, c) .Formula = tArray ( c, r) 'Următorul c' Următorul r 'cu transpunerea tArray = Application.WorksheetFunction.Transpose (tArray) Pentru r = LBound (tArray, 1) To UBound (tArray, 1) For c = LBound (tArray, 2) To UBound (tArray, 2) ActiveCell.Offset (r - 1, c - 1) .Formula = tArray (r, c) Următorul c Următorul r Sfârșit Sub Funcție privată ReadDataFromWorkbook (SourceFile As String, SourceRange As String) As Variant 'necesită o referință la biblioteca Microsoft ActiveX Data Objects "dacă SourceRange este o referință de interval:" această funcție poate returna date din prima foaie de lucru din SourceFile "dacă SourceRange este o referință de nume definită:" această funcție poate returna date m orice foaie de lucru din SourceFile 'SourceRange trebuie să includă exemplele antetelor intervalului:' varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: A21") 'varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWb. xls "," A1: B21 ") 'varRecordSetData = ReadDataFromWorkbook (" C: \ FolderName \ SourceWbName.xls "," DefinedRangeName ") Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset Dim dbConnectionString As String ding = {Microsoft Excel Driver (* .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 'returnează o matrice de două dim cu toate înregistrările în rs rs.Închideți dbConnection.Close' închideți conexiunea bazei de date Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Exit Function InvalidInput: MsgBox "Fișierul sursă sau intervalul sursă este nevalid! ", vbExclamation," Obțineți date din registrul de lucru închis "Set rs = Nothing Set dbConnection = Nothing End Function

Exemplul macro presupune că proiectul dvs. VBA a adăugat o referință la biblioteca de obiecte ADO.
Puteți face acest lucru din VBE selectând meniul Instrumente, Referințe și selectând Microsoft
ActiveX Data Objects x.x Library de obiecte.
Utilizați ADO dacă puteți alege între ADO și DAO pentru importul sau exportul de date.