DXR165の備忘録

自分用の備忘録です。

ADO でExcelワークシートをDBのように扱う  

2012/9/29 記事修正
Excel VBAです。ADOでExcelワークシトをDBのように扱えます。ワークシートの表形式のデータをテーブルのように参照することができます。
メリットとしては
1. Excel がなくてもエクセルのファイルを操作することができます。が、Excel が入っていないPCも少ないでしょう。 
2. ブックをオープンしなくてもよい。 VBA でブックを開くと当然ですがExcel が起動します。
デメリット
いろいろあります。


サンプルコード

Dim cn As Object
Dim rs As Object
Dim s As String
Dim u As String
Dim iCols As Long
Const t = "app name"
Const C1 = "Provider=Microsoft.Jet.OLEDB.4.0"
Const C2 = "Extended Properties=Excel 8.0"
Const C3 = "Data Source=C:\xxx\xxx.xls"

On Error Resume Next

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

u = t & " ADO Ver " & cn.Version

cn.Open C1 & ";" & C2 & ";" & C3

If Err.Number <> 0 Then
MsgBox "ADO Connection Openでエラーが発生しました" & vbCrLf & Err.Description, , u
cn.Close
Set cn = Nothing
End
End If

s = "SELECT * FROM [sheetname$] WHERE "
s = s & "列1='値' "
s = s & ";"

rs.Open s, cn
If Err.Number <> 0 Then
MsgBox "ADO Recordset Openでエラーが発生しました" & vbCrLf & Err.Description, , u
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End
End If

If Not rs.Bof Then
'新しいブックのシートに転記
Workbooks.Add
For iCols = 0 To rs.Fields.Count - 1
ActiveWorkbook.ActiveSheet.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
Next
ActiveWorkbook.ActiveSheet.Cells(2, 1).CopyFromRecordset rs
Else
ActiveWorkbook.ActiveSheet.Cells(1, 1) = "該当レコードなし"
End If


rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
関連記事

category: Access その他

tb: 0   cm: 0

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://dxr165.blog.fc2.com/tb.php/12-773d347e
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

最新コメント

カウンター(2012/3/10以降)