サンプル2(実用的)テーブルのデータをそのままExcelのワークシート上に展開する方法
Dim dbs As Database
Dim rst As Recordset
Dim intRow As Integer
Dim intCell As Integer
Dim xls As Object
'仕入先テーブルを開く
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("仕入先")
'Excelオブジェクトを生成
Set xls = CreateObject("Excel.Application")
With xls
'画面の再描画を抑止
.ScreenUpdating = False
'新しいブックを追加
.workbooks.Add
'1行目に列見出し(フィールド名)をExcelに出力
intRow = 1
For intCell = 1 To rst.Fields.Count
.Cells(intRow, intCell).Value = rst.Fields(intCell - 1).Name
Next intCell
'各レコードをExcelに出力
intRow = 2
Do Until rst.EOF
For intCell = 1 To rst.Fields.Count
.Cells(intRow, intCell).Value = rst.Fields(intCell - 1)
Next intCell
intRow = intRow + 1
rst.MoveNext
Loop
rst.Close
'列幅のジャストフィット
.Cells.Select
.Cells.EntireColumn.AutoFit
'A1セルだけを選択状態にする
.Range("A1").Select
'画面の再描画を元に戻す
.ScreenUpdating = True
'Excelを可視状態にする
.Visible = True
End With
Set xls = Nothing
'-------------------------------------------
'注意事項:
'AccessからExcelオブジェクトを生成しただけでは、Excelは目に見えない状態にあります。そのため、「.Visible = True」のコードを実行してExcelを可'視状態にする必要があります。ただし、Accessのエクスポートのように、Excel自体を表示させる必要がなく、データ出力後にブックをそのまま保存して終了させたいような場合にはこのコードは不要です。 もし「.Visible = True」を先に実行したあとにセルへの出力を行うような手順の場合、「.ScreenUpdating = False」のコードを実行しないと、セルに1つ1つデータがはめ込まれていく様子がよく分かります。ただし、その都度画面の再描画が行われるため、非常に処理時間が延びてしまいます。 Excel VBAのマクロの記録などで作ったコードをここに応用する場合、Excel VBAのコードの前には必ず「.」を付けるよう注意します。たとえば、Excelでは「Cells.Select」というコードは、Access VBA上では「.Cells.Select」(実際にはWithを使っているので"xls.Cells.Select"という形)とします。 セルの番号は1から始まります。一方、テーブルのフィールド番号は0から始まります。「rst.Fields(intCell - 1)」などの配列内の添え字に留意してください。
'-------------------------------------------