Om du vill importera mycket data från en sluten arbetsbok kan du göra detta med ADO och makrot nedan.
Om du vill hämta data från ett annat kalkylblad än det första kalkylbladet i den stängda arbetsboken,
du måste hänvisa till ett användardefinierat namngivet område. Makrot nedan kan användas så här (i Excel 2000 eller senare):
GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "A1: B21", ActiveCell, False GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "MyDataRange", Range ("B3"), True Sub GetDataFromClosedWorkbook (SourceFile As) String, SourceRange As String, _ TargetRange As Range, IncludeFieldNames As Boolean) 'kräver en referens till Microsoft ActiveX Data Objects -biblioteket' om SourceRange är en intervallreferens: 'detta returnerar data från det första kalkylbladet i SourceFile' om SourceRange är en definierad namnreferens: 'detta kommer att returnera data från alla kalkylblad i SourceFile' SourceRange måste inkludera områdesrubrikerna Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset Dim dbConnectionString As String Dim TargetCell As Range, i As Integer dbConnectionString = "DRIVER = {Microsoft Excel -drivrutin (*.xls)}; " & _ "ReadOnly = 1; DBQ =" & SourceFile Set dbConnection = New ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString 'öppna databasanslutningen 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 'stäng databasanslutningen Set TargetCell = Nothing Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Exit Sub InvalidInput: MsgBox "Källfilen eller källområdet är ogiltigt! ", _ vbExclamation," Hämta data från stängd arbetsbok "Avsluta sub
En annan metod som inte använder CopyFromRecordSet-metoden Med makrot nedan kan du utföra importen och ha bättre kontroll över resultaten som returneras från RecordSet.
Sub TestReadDataFromWorkbook () 'fyller i data från en stängd arbetsbok i den aktiva cellen Dim tArray As Variant, r As Long, c As Long tArray = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: B21")' utan att transponera '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) 'Nästa c' Nästa r 'med transponering av tArray = Application.WorksheetFunction.Transpose (tArray) För r = LBound (tArray, 1) Till UBound (tArray, 1) För c = LBound (tArray, 2) Till UBound (tArray, 2) ActiveCell.Offset (r - 1, c - 1) .Formula = tArray (r, c) Nästa c Nästa r Slut Sub Private Function ReadDataFromWorkbook (SourceFile As String, SourceRange As String) As Variant 'kräver en referens till Microsoft ActiveX Data Objects -biblioteket 'om SourceRange är en intervallreferens:' den här funktionen kan bara returnera data från det första kalkylbladet i SourceFile 'om SourceRange är en definierad namnreferens:' den här funktionen kan returnera data från m alla kalkylblad i SourceFile 'SourceRange måste innehålla exempelhuvudets exempel:' varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: A21") 'varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName. xls "," A1: B21 ") 'varRecordSetData = ReadDataFromWorkbook (" C: \ FolderName \ SourceWbName.xls "," DefinedRangeName ") Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset Dim dbConnectionString As String dbConnection {Microsoft Excel Driver (*.xls)}; ReadOnly = 1; DBQ = "& SourceFile Set dbConnection = New ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString 'öppna databasanslutningen Set rs = dbConnection.Execute (" [" & SourceRange & "]") Vid fel GoTo 0 ReadDataFromWorkbook = rs.GetRows returnerar en tvådimensionerad array med alla poster i rs rs.Close dbConnection.Close 'stäng databasanslutningen Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Exit Function InvalidInput: MsgBox "Källfilen eller källintervallet är ogiltigt! ", vbExclamation," Hämta data från stängd arbetsbok "Ställ in rs = Ingenting Ange dbConnection = Inget slut Funktion
Makroexemplet förutsätter att ditt VBA -projekt har lagt till en referens till ADO -objektbiblioteket.
Du kan göra detta från VBE genom att välja menyn Verktyg, Referenser och välja Microsoft
ActiveX Data Objects x.x Object Library.
Använd ADO om du kan välja mellan ADO och DAO för dataimport eller export.