> EXCELアプリケーションを起動してからの貼り付け
> のコード部分は省略しております。
出来ればその辺りのコードも含めて掲載されることをお奨めします。
> ACCESSのクエリをEXCELのテンプレートに貼付後にテンプレートを修正するVBA
> 「レコードセットを開いてフォームの値を用いてクエリを作る」
> 「クエリの値を指定されたEXCELテンプレートの指定の位置へ貼り付ける」
例えば「ある SELECT 文の実行結果を新規作成した Excel ブックに出力する」
という処理を Access のモジュールから実行する場合は次のような形になります。
(実行時バインディングではなく事前バインディングを採用した場合)
(標準モジュール)
Sub subOutputToExcel()
On Error GoTo Err_subOutputToExcel
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim fld As DAO.Field
Dim xlsApp As Excel.Application
Dim xlsWorkbook As Excel.Workbook
Dim xlsWorksheet As Excel.Worksheet
Dim xlsRange As Excel.Range
Dim strSQL As String
Dim lngRow As Long
Dim lngColumn As Long
Dim lngStartRow As Long
Dim lngStartColumn As Long
Dim lngLastRow As Long
Dim lngLastColumn As Long
Set db = CurrentDb
'[テーブル1]のうち、[ID]の値が 10 未満であるレコードを抽出し、
'[ID]の昇順に並べ替えた結果を得る SELECT 文
strSQL = "SELECT * FROM [テーブル1]" & _
" WHERE [ID] < 10" & _
" ORDER BY [ID];"
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
If rs.EOF Then
Set rs = Nothing
Set db = Nothing
MsgBox "出力対象となるレコードがありません。", _
vbInformation, _
"該当データなし"
Exit Sub
End If
'Excelアプリケーションの新規インスタンスの生成と参照の取得
Set xlsApp = New Excel.Application
xlsApp.ScreenUpdating = False
'新規ブックの作成と参照の取得
'(既存のブックを開く場合は Add メソッドではなく
'Open メソッドを呼び出し、その戻り値を取得する)
Set xlsWorkbook = xlsApp.Workbooks.Add
'ブックの1つめのワークシートへの参照を取得
Set xlsWorksheet = xlsWorkbook.Worksheets(1)
'列見出し行の出力
For lngColumn = 1 To rs.Fields.Count
xlsWorksheet.Cells(1, lngColumn).Value = rs.Fields(lngColumn - 1).Name
Next
'レコードセットの出力
xlsWorksheet.Cells(2, 1).CopyFromRecordset rs
'使用中のセル範囲の取得
Set xlsRange = xlsWorksheet.UsedRange
'以下、セル範囲の編集
With xlsRange
lngStartRow = 1
lngStartColumn = 1
lngLastRow = .Rows.Count
lngLastColumn = .Columns.Count
'行の高さ
.RowHeight = 16
'全セルの罫線の書式設定
With .Borders
.LineStyle = xlContinuous
.Weight = xlHairline
.Color = RGB(0, 0, 0)
End With
'表の外枠の罫線の書式設定
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
'先頭行(列見出し行)の書式設定
With .Range(.Cells(lngStartRow, lngStartColumn), _
.Cells(lngStartRow, lngLastColumn))
.Borders(xlEdgeBottom).LineStyle = xlDouble
.Font.Bold = True
.Interior.Color = RGB(204, 204, 204)
.HorizontalAlignment = xlCenter
End With
'列幅の自動調整
.Columns.AutoFit
'最終セルの2行下のセルの設定
With .Cells(lngLastRow, lngLastColumn).Offset(2, 0)
.Value = "レコード件数: " & rs.RecordCount & " 件"
.HorizontalAlignment = xlRight
End With
End With
'先頭行の固定
With xlsApp.ActiveWindow
.SplitRow = 1
.FreezePanes = True
End With
'ワークシートのページ設定
With xlsWorksheet.PageSetup
.PaperSize = xlPaperA4
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.CenterHeader = "&A"
.RightHeader = "&D &T"
.CenterFooter = "&P / &N"
End With
'終了処理
Exit_subOutputToExcel:
On Error Resume Next
xlsApp.Visible = True
xlsApp.ScreenUpdating = True
xlsApp.UserControl = True
Set xlsRange = Nothing
Set xlsWorksheet = Nothing
Set xlsWorkbook = Nothing
Set xlsApp = Nothing
Set rs = Nothing
Set db = Nothing
Exit Sub
'エラー時処理
Err_subOutputToExcel:
MsgBox Err.Number & ": " & Err.Description, _
vbCritical, _
"実行時エラー (subOutputToExcel)"
Resume Exit_subOutputToExcel
End Sub
重要なポイントは、 Excel の最上位オブジェクトである
Excel.Application オブジェクトへの参照をオブジェクト変数に保持し、
そのメンバーや下位のオブジェクトを明示的に参照できるような
コードを記述する、ということです。