Importujte data z uzavřeného sešitu (ADO) pomocí jazyka VBA v aplikaci Microsoft Excel

Anonim

Pokud chcete importovat mnoho dat z uzavřeného sešitu, můžete to provést pomocí ADO a níže uvedeného makra.
Pokud chcete načíst data z jiného listu než z prvního listu v zavřeném sešitu,
musíte odkazovat na uživatelem definovaný pojmenovaný rozsah. Níže uvedené makro lze použít takto (v aplikaci Excel 2000 nebo novější):

GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "A1: B21", ActiveCell, False GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "MyDataRange", Range ("B3"), True Sub GetDataFromClosed String, SourceRange As String, _ TargetRange As Range, IncludeFieldNames As Boolean) 'requires a reference to the Microsoft ActiveX Data Objects library' if SourceRange is a range reference: 'this will return data from the first worksheet in SourceFile' if SourceRange is a definovaný odkaz na název: 'toto vrátí data z libovolného listu v SourceFile' SourceRange musí obsahovat záhlaví rozsahu 'Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset Dim dbConnectionString As String Dim TargetCell As Range, i As Integer dbConnectionString = "DRIVER = {Ovladač 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) If IncludeFieldNames Then For 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 "The source file or zdrojový rozsah je neplatný! ", _ vbExclamation," Získat data z uzavřeného sešitu "End Sub

Další metoda, která nepoužívá metodu CopyFromRecordSet Pomocí níže uvedeného makra můžete provést import a mít lepší kontrolu nad výsledky vrácenými ze sady záznamů.

Sub TestReadDataFromWorkbook () 'vyplňuje data z uzavřeného sešitu v aktivní buňce Dim tArray As Variant, r As Long, c As Long tArray = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: B21")' bez transpozice 'For r = LBound (tArray, 2) To UBound (tArray, 2)' For c = LBound (tArray, 1) To UBound (tArray, 1) 'ActiveCell.Offset (r, c) .Formula = tArray ( c, r) 'Next c' Next r 'with transposing tArray = Application.WorksheetFunction.Transpose (tArray) For 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) Next c Next r End Sub Private Function ReadDataFromWorkbook (SourceFile As String, SourceRange As String) As Variant 'vyžaduje referenci do knihovny Microsoft ActiveX Data Objects 'pokud SourceRange je odkaz na rozsah:' tato funkce může vracet data pouze z prvního listu v SourceFile 'pokud SourceRange je definovaný název odkazu:' tato funkce může vracet data zpět m jakýkoli list v SourceFile 'SourceRange musí obsahovat příklady hlaviček rozsahu:' 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 dbConnectionStrne As String {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 & "]") Při chybě GoTo 0 ReadDataFromWorkbook = rs.GetRows 'vrátí dvourozměrné pole se všemi záznamy v rs rs.Close dbConnection.Close' zavřít připojení k databázi Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Ukončit funkci InvalidInput: MsgBox "Zdrojový soubor nebo zdrojový rozsah je neplatný! ", vbExclamation," Získat data z uzavřeného sešitu "Set rs = Nothing Set dbConnection = Nothing End Function

Příklad makra předpokládá, že váš projekt VBA přidal odkaz na knihovnu objektů ADO.
Můžete to udělat z VBE výběrem nabídky Nástroje, Reference a výběrem Microsoft
Knihovna objektů ActiveX Data Objects x.x.
Použijte ADO, pokud si můžete vybrat mezi ADO a DAO pro import nebo export dat.