Tuo tiedot suljetusta työkirjasta (ADO) käyttämällä VBA: ta Microsoft Excelissä

Anonim

Jos haluat tuoda paljon tietoja suljetusta työkirjasta, voit tehdä tämän ADO: n ja alla olevan makron avulla.
Jos haluat hakea tietoja muulta kuin suljetun työkirjan ensimmäiseltä laskentataulukolta,
sinun on viitattava käyttäjän määrittämään nimettyyn alueeseen. Alla olevaa makroa voidaan käyttää seuraavasti (Excel 2000: ssa tai uudemmassa):

GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "A1: B21", ActiveCell, False GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "MyDataRange", Range ("B3"), True Sub GetDataFromC String, SourceRange as String, _ TargetRange As Range, IncludeFieldNames as Boolean) 'edellyttää viittausta Microsoft ActiveX Data Objects -kirjastoon', jos SourceRange on alueviite: 'tämä palauttaa tiedot SourceFile -tiedoston ensimmäisestä laskentataulukosta', jos SourceRange on määritetty nimiviittaus: 'tämä palauttaa tiedot mistä tahansa SourceFile -laskentataulukosta' = {Microsoft Excel -ohjain (*.xls)}; " & _ "ReadOnly = 1; DBQ =" & SourceFile Set dbConnection = Uusi ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString 'avaa tietokantayhteys Aseta rs = dbConnection.Execute ("[" & SourceRange & "]") Aseta 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 'sulje tietokantayhteys Set TargetCell = Nothing Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Exit Sub InvalidInput: MsgBox "Lähdetiedosto tai lähdealue on virheellinen! ", _ vbExclamation," Get data from closed workbook "End Sub

Toinen menetelmä, joka ei käytä CopyFromRecordSet-menetelmää Alla olevan makron avulla voit suorittaa tuonnin ja hallita paremmin RecordSetin palauttamia tuloksia.

Sub TestReadDataFromWorkbook () 'täyttää suljetun työkirjan tiedot aktiivisessa solussa Dim tArray As Variant, r Niin pitkä, c Niin pitkä tArray = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: B21")' ilman transponointia '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) 'Seuraava c' Seuraava r ', jossa tArray = Application.WorksheetFunction.Transpose (tArray) R = LBound (tArray, 1) UBoundiin (tArray, 1) For c = LBound (tArray, 2) (tArray, 2) ActiveCell.Offset (r - 1, c - 1). Formula = tArray (r, c) Seuraava c Seuraava r Lopeta osa Yksityinen toiminto ReadDataFromWorkbook (SourceFile As String, SourceRange As String) As Variant 'vaatii viitteen Microsoft ActiveX Data Objects -kirjastoon ", jos SourceRange on alueviite:" tämä toiminto voi palauttaa tietoja vain SourceFilen ensimmäisestä laskentataulukosta ", jos SourceRange on määritetty nimiviittaus:" tämä toiminto voi palauttaa tiedot edestakaisin m SourceFile 'SourceRangen jokaisen laskentataulukon on sisällettävä alueotsikoiden esimerkit:' varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: A21") 'varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWame xls "," A1: B21 ") 'varRecordSetData = ReadDataFromWorkbook (" C: \ FolderName \ SourceWbName.xls "," DefinedRangeName ") Dim dbConnection Kuten ADODB.Connection, rs AS ADODB.Recordset Dim dbConnectionString As String = dbConne {Microsoft Excel Driver (*.xls)}; ReadOnly = 1; DBQ = "& SourceFile Set dbConnection = New ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString" avaa tietokantayhteys Aseta rs = dbConnection.Execute ("[" & SourceRange & "]") On Error GoTo 0 ReadDataFromWorkbook = rs.GetRows 'palauttaa kaksiulotteisen taulukon, jossa kaikki tietueet ovat rs rs.Sulje dbConnection.Close' sulje tietokantayhteys Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Poistu Toiminto InvalidInput: MsgBox "Lähdetiedosto tai lähdealue on virheellinen! ", vbExclamation," Hae tietoja suljetusta työkirjasta "Set rs = Nothing Set dbConnection = Nothing End Function

Makroesimerkki olettaa, että VBA -projektisi on lisännyt viittauksen ADO -objektikirjastoon.
Voit tehdä tämän VBE: stä valitsemalla valikon Työkalut, Viitteet ja Microsoft
ActiveX -tietoobjektit x.x -objektikirjasto.
Käytä ADO: ta, jos voit valita ADO: n tai DAO: n tietojen tuonnin tai viennin välillä.