Kui soovite suletud töövihikust palju andmeid importida, saate seda teha ADO ja alloleva makro abil.
Kui soovite andmeid hankida muult töölehelt kui suletud töövihiku esimeselt töölehelt,
peate viitama kasutaja määratud vahemikule. Allolevat makro saab kasutada järgmiselt (Excel 2000 või uuemas versioonis):
GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "A1: B21", ActiveCell, False GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "MyDataRange", Range ("B3"), True Sub GetDataFromC Source String, SourceRange kui string, _ TargetRange As Range, IncludeFieldNames as Boolean) "nõuab viitamist Microsofti ActiveX -i andmeobjektide teekile", kui SourceRange on vahemiku viide: "see tagastab andmed SourceFile'i esimeselt töölehelt", kui SourceRange on määratletud nime viide: "see tagastab andmed mis tahes SourceFile'i töölehelt" = {Microsoft Exceli draiver (*.xls)}; " & _ "ReadOnly = 1; DBQ =" & SourceFile Set dbConnection = Uus ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString 'ava andmebaasi ühendus Set rs = dbConnection.Execute ("[" & SourceRange & "]") Määra TargetCell = TargetRange.Cells (1, 1) If IncludeFieldNames then For i = 0 to rs.Fields.Count - 1 TargetCell.Oset (0, i). Formula = rs.Fields (i). Nimi Järgmine i Set TargetCell = TargetCell .Offset (1, 0) End If TargetCell.CopyFromRecordset rs rs.Close dbConnection.Close 'sulgege andmebaasi ühendus Set TargetCell = Nothing Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Exit Sub InvalidInput: MsgBox "Allikafail või allikavahemik on kehtetu! ", _ vbTõend," Hankige andmed suletud töövihikust "Lõpu alam
Teine meetod, mis ei kasuta meetodit CopyFromRecordSet Alloleva makro abil saate importida ja paremini kontrollida RecordSetist tagastatud tulemusi.
Sub TestReadDataFromWorkbook () 'täidab suletud töövihiku andmed aktiivses lahtris Dim tArray As Variant, r nii pikk, c kui pikk tArray = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: B21")' ilma ülevõtmiseta '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) 'Järgmine c' Järgmine r ', kusjuures ülevõtmine (tArray, 2) ActiveCell.Offset (r - 1, c - 1). Vormel = tArray (r, c) Järgmine c Järgmine r End alamfunktsiooni ReadDataFromWorkbook (SourceFile As String, SourceRange As String) As Variant 'nõuab viidet Microsofti ActiveX andmeobjektide teeki ", kui SourceRange on vahemiku viide:" see funktsioon saab tagastada andmeid ainult SourceFile'i esimeselt töölehelt ", kui SourceRange on määratletud nimeviide:" see funktsioon võib andmeid tagasi saata m iga tööleht SourceFile 'SourceRange'is peab sisaldama vahemiku päiste näiteid:' varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: A21") 'varRecordSetData = ReadDataFromWorkbook ("C: FolderName \ SourceWabbook xls "," A1: B21 ") 'varRecordSetData = ReadDataFromWorkbook (" C: \ FolderName \ SourceWbName.xls "," DefinedRangeName ") Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset Dim dbConnectionString As String = dbConne {Microsoft Exceli draiver (*.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 " Väljumisfunktsioon InvalidInput: MsgBox "Lähtefail või allikavahemik on kehtetu! ", vbExclamation," Andmete hankimine suletud töövihikust "Set rs = Nothing Set dbConnection = Nothing End Function
Makronäide eeldab, et teie VBA projekt on lisanud viite ADO objektiteekile.
Seda saate teha VBE -s, valides menüü Tööriistad, Viited ja valides Microsoft
ActiveX andmeobjektid x.x objektide kogu.
Kasutage ADO -d, kui saate andmete importimiseks või eksportimiseks valida ADO ja DAO vahel.