Importujte údaje z uzavretého zošita (ADO) pomocou jazyka VBA v programe Microsoft Excel

Anonim

Ak chcete importovať veľa údajov z uzavretého zošita, môžete to urobiť pomocou ADO a makra nižšie.
Ak chcete načítať údaje z iného pracovného hárka ako z prvého pracovného hárka v zatvorenom zošite,
musíte sa odvolať na užívateľom definovaný pomenovaný rozsah. Nasledujúce makro je možné použiť takto (v programe Excel 2000 alebo novšom):

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) 'vyžaduje odkaz na knižnicu Microsoft ActiveX Data Objects', ak SourceRange je odkaz na rozsah: 'toto vráti údaje z prvého pracovného hárka v SourceFile', ak SourceRange je definovaný odkaz na názov: „vráti údaje z ľubovoľného pracovného hárka v súbore SourceFile“ SourceRange musí obsahovať hlavičky rozsahov Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset Dim dbConnectionString As String Dim TargetCell As Range, i As Integer dbConnectionString = "DRIVER = {Ovládač 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ískať údaje z uzavretého zošita "End Sub

Iná metóda, ktorá nepoužíva metódu CopyFromRecordSet S makrom uvedeným nižšie môžete vykonať import a mať lepšiu kontrolu nad výsledkami vrátenými zo sady záznamov.

Sub TestReadDataFromWorkbook () 'vypĺňa údaje z uzavretého zošita v aktívnej bunke Dim tArray As Variant, r As Long, c As Long tArray = ReadDataFromWorkbook („C: \ FolderName \ SourceWbName.xls", "A1: B21")' bez transpozície „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 odkaz do knižnice Microsoft ActiveX Data Objects „ak SourceRange je referencia rozsahu:“ táto funkcia môže vracať údaje iba z prvého pracovného hárka v SourceFile „ak je SourceRange definovaný názov:“ táto funkcia môže vracať údaje z m akýkoľvek pracovný hárok v súbore SourceFile „SourceRange musí obsahovať príklady hlavičiek 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 dbConnectionSonneString 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 & "]") Pri chybe GoTo 0 ReadDataFromWorkbook = rs.GetRows 'vráti dvojrozmerné pole so všetkými záznamami v rs rs.Close dbConnection.Close' zatvorí pripojenie k databáze Nastaviť rs = Nič Nastaviť dbConnection = Nič Pri chybe GoTo 0 Ukončiť funkciu InvalidInput: MsgBox "Zdrojový súbor alebo je zdrojový rozsah neplatný! ", vbExclamation," Získať údaje z uzavretého zošita "Nastaviť rs = Nič Nastaviť dbConnection = Nič Ukončiť funkciu

Príklad makra predpokladá, že váš projekt VBA pridal odkaz na knižnicu objektov ADO.
Môžete to urobiť z VBE tak, že vyberiete ponuku Nástroje, Referencie a vyberiete položku Microsoft
Knižnica objektov ActiveX Data Objects x.x.
Použite ADO, ak si môžete vybrať medzi ADO a DAO na import alebo export údajov.