DAOを使用してExcelファイルをデータベースのようにSQLを使って読み込むことが出来ます。
サンプルで使用するExcelファイルには下図のようにデータが格納されています。
一行目(行見出し)がフィールド名として扱われます。
※サンプル中で使用されているMakeFileNameとStripFileNameに関しては
パス名からファイル名取得
パス名からファイル名を除く
を参照して下さい。
Private SubcmdHDRYES_Click()
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strXLSName As String
Dim strSQL As String
strXLSName = App.Path & "\hoge.xls"
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(strXLSName, False, False, "EXCEL 8.0;HDR=YES;")
strSQL = "Select * From [Sheet1$] "
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
List1.Clear
Do Until rs.EOF
'rs("0").value を指定すると「このコレクションには項目がありません」というエラーになり指定できません。
'数値の見出しは指定できないみたいです。
List1.AddItem rs("見出し1").Value & vbTab & _
rs(1).Value & vbTab & _
rs("見出し3").Value
'Debug.Print rs("0").Value
rs.MoveNext
Loop
rs.Close
db.Close
ws.Close
End Sub
Private Sub cmdHDRNO_Click()
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strXLSName As String
Dim strSQL As String
strXLSName = App.Path & "\hoge.xls"
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(strXLSName, False, False, "EXCEL 8.0;HDR=NO;")
strSQL = "Select * From [Sheet1$] "
'下記のようにフィールドを指定してIDEから実行すると、私の環境[NT4.0+VB6.0(SP5) or w2k+VB6.0(SP5)]では
'「選択されたCollatingSequenceはOSではサポートされていません」というエラーになります。
'このエラーは最初の1回だけで、以降IDEを立ち上げ直すまでこのエラーは出ません。無気味だ…
'exeファイルにするとこのエラーは起きません。
'strSQL = "Select F1,F2,F3 From [Sheet1$] "
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
List2.Clear
Do Until rs.EOF
'F3の列(列中に日本語と数値の混在)を参照しようとすると
'「数値フィールドがオーバーフローしました」というエラーになり指定できません。
'どうやらフィールドの型がdoubleになってしまい、そこへ見出しの日本語が格納されるため
'エラーになっているようです。
List2.AddItem rs("F1").Value & vbTab & _
rs("F2").Value
'Debug.Print rs("F3").Value
Debug.Print FieldType(rs("F3").Type)
rs.MoveNext
Loop
rs.Close
db.Close
ws.Close
End Sub
DownLoad vbtips120.lzh 2KB (VB6.0)