Użyj zamkniętego skoroszytu jako bazy danych (ADO) za pomocą VBA w Microsoft Excel

Anonim

Za pomocą poniższych procedur możesz użyć ADO do pobrania zestawu rekordów z zamkniętego skoroszytu i odczytu/zapisu danych.
Wywołaj procedurę w ten sposób:

GetWorksheetData "C:FoldernameFilename.xls", "SELECT * FROM [SheetName$];", ThisWorkbook.Worksheets(1).Range("A3")
Zastąp SheetName nazwą arkusza, z którego chcesz pobrać dane.

Sub GetWorksheetData(strSourceFile As String, strSQL As String, TargetCell As Range)
Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Integer, r As Long
Jeśli TargetCell to nic, to wyjdź z Sub
Ustaw cn = Nowe ADODB.Połączenie
Przy błędzie Wznów Dalej
cn.Otwórz "DRIVER={Sterownik Microsoft Excel (*.xls)};DriverId=790;ReadOnly=True;" & _
"DBQ=" & strSourceFile & ";"
' DriverId=790: Excel 97/2000
' DriverId=22: Excel 5/95
' DriverId=278: Excel 4
' DriverId=534: Excel 3
W przypadku błędu Przejdź do 0
Jeśli cn jest niczym, to
MsgBox "Nie można znaleźć pliku!", vbExclamation, ThisWorkbook.Name
Wyjście Sub
Zakończ, jeśli

' otwórz zestaw rekordów
Ustaw rs = Nowy ADODB.Zestaw rekordów
Przy błędzie Wznów Dalej
rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
' rs.Open "SELECT * FROM [NazwaArkusza$]", _
cn, adOpenForwardOnly, adLockReadOnly, adCmdText
' rs.Open "SELECT * FROM [NazwaArkusza$]", _
cn, adOpenStatic, adLockOptimistic, adCmdText
' rs.Open "SELECT * FROM [Nazwa Arkusza$] WHERE [Nazwa Pola] LIKE 'A%'", _
cn, adOpenStatic, adLockOptimistic, adCmdText
' rs.Open "SELECT * FROM [NazwaArkusza$] WHERE [Nazwa pola] LIKE 'A%' ORDER BY [Nazwa pola]", _
cn, adOpenStatic, adLockOptimistic, adCmdText

' opcjonalne sposoby pobierania zestawu rekordów
' Ustaw rs = cn.Execute("[A1:Z1000]") ' pierwszy arkusz
' Set rs = cn.Execute("[DefinedRangeName]") ' dowolny arkusz

W przypadku błędu Przejdź do 0
Jeśli rs jest niczym, to
MsgBox "Nie można otworzyć pliku!", vbExclamation, ThisWorkbook.Name
cn.Zamknij
Ustaw cn = Nic
Wyjście Sub
Zakończ, jeśli

RS2WS rs, TargetCell
Opcjonalne podejście ' TargetCell.CopyFromRecordset rs ' dla programu Excel 2000 lub nowszego

Jeśli rs.State = adStateOpen, wtedy
rs.Zamknij
Zakończ, jeśli
Ustaw rs = Nic
cn.Zamknij
Ustaw cn = Nic
Napis końcowy

W przykładzie makra założono, że projekt VBA dodał odwołanie do biblioteki obiektów ADO.
Możesz to zrobić z poziomu VBE, wybierając menu Narzędzia, Referencje i wybierając Microsoft
ActiveX Data Objects x.x Biblioteka obiektów.