Ja vēlaties importēt daudz datu no slēgtās darbgrāmatas, varat to izdarīt, izmantojot ADO un zemāk esošo makro.
Ja vēlaties izgūt datus no citas darblapas, nevis slēgtās darbgrāmatas pirmās darblapas,
jums jāatsaucas uz lietotāja definētu diapazonu. Zemāk esošo makro var izmantot šādi (programmā Excel 2000 vai jaunākā versijā):
GetDataFromClosedWorkbook "C: FolderName \ WorkbookName.xls", "A1: B21", ActiveCell, False GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "MyDataRange", Range ("B3"), True Sub GetDataFromC Source String, SourceRange as String, _ TargetRange As Range, IncludeFieldNames As Boolean) ”nepieciešama atsauce uz Microsoft ActiveX datu objektu bibliotēku”, ja SourceRange ir diapazona atsauce: “tas atgriezīs datus no pirmās SourceFile darblapas”, ja SourceRange ir definēta nosaukuma atsauce: 'tas atgriezīs datus no jebkuras SourceFile darblapas' = {Microsoft Excel draiveris (*.xls)}; " & _ "ReadOnly = 1; DBQ =" & SourceFile Set dbConnection = Jauns ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString 'atver datu bāzes savienojumu 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). Nosaukums Tālāk i Set TargetCell = TargetCell .Offset (1, 0) End If TargetCell.CopyFromRecordset rs rs.Close dbConnection.Close 'aizvērt datu bāzes savienojumu Set TargetCell = Nothing Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Exit Sub InvalidInput: MsgBox "Avota fails vai avota diapazons nav derīgs! ", _ vbIzsaukums," Iegūt datus no slēgtās darbgrāmatas "Beigu apakš
Vēl viena metode, kurā netiek izmantota metode CopyFromRecordSet Izmantojot zemāk esošo makro, jūs varat veikt importēšanu un labāk kontrolēt no RecordSet atgrieztos rezultātus.
Sub TestReadDataFromWorkbook () 'aizpilda datus no slēgtās darbgrāmatas aktīvajā šūnā Dim tArray As Variant, r Cik ilgi, c Tik ilgi tArray = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: B21")' bez transponēšanas 'Attiecībā uz r = LBound (tArray, 2) Uz UBound (tArray, 2)' Attiecībā uz c = LBound (tArray, 1) Uz UBound (tArray, 1) 'ActiveCell.Pārvietojums (r, c). Formula = tArray ( c, r) "Nākamais c" Nākamais r "ar transponēšanu (tArray, 2) ActiveCell.Offset (r - 1, c - 1). Formula = tArray (r, c) Nākamā c Nākamā r Beigt apakšprivātā privātā funkcija ReadDataFromWorkbook (SourceFile As String, SourceRange As String) As Variant "nepieciešama atsauce uz Microsoft ActiveX datu objektu bibliotēku ", ja SourceRange ir diapazona atsauce:" šī funkcija var atgriezt datus tikai no pirmās darblapas SourceFile ", ja SourceRange ir definēta nosaukuma atsauce:" šī funkcija var atgriezt datus m jebkurā darblapā SourceFile 'SourceRange jāiekļauj diapazona galvenes piemēri:' varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: A21") 'varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWam xls "," A1: B21 ") 'varRecordSetData = ReadDataFromWorkbook (" C: \ FolderName \ SourceWbName.xls "," DefinedRangeName ") Dim dbConnection Kā ADODB.Connection, rs Kā ADODB.Recordset Dim dbConnectionString Kā virkne = dbConne {Microsoft Excel draiveris (*.xls)}; ReadOnly = 1; DBQ = "& SourceFile Set dbConnection = New ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString" atveriet datu bāzes savienojumu Set rs = dbConnection.Execute ("[" & SourceRange " Izejas funkcija InvalidInput: MsgBox "Avota fails vai avota diapazons nav derīgs! ", vbExclamation," Iegūt datus no slēgtās darbgrāmatas "Set rs = Nothing Set dbConnection = Nothing End Function
Makro piemērā tiek pieņemts, ka jūsu VBA projekts ir pievienojis atsauci uz ADO objektu bibliotēku.
To var izdarīt no VBE, izvēloties izvēlni Rīki, Atsauces un atlasot Microsoft
ActiveX datu objekti x.x objektu bibliotēka.
Izmantojiet ADO, ja datu importēšanai vai eksportēšanai varat izvēlēties starp ADO un DAO.