Microsoft Access Club >SampleFile >インデックス >このページ >次頁 < 前項  サイト内検索


Excelへデータを出力する方法 - TransferSpreadsheetメソッド:SampleFile126



AccessデータをVBAを用いてExcelへデータ出力することができます。利用するメソッドは、Accessに備わっているTransferSpreadsheet メソッド です。長ったらしい名前なので、難しそうな感じがしますね。なお、メソッドとは、オブジェクトに対して「このようにしなさい…」という命令を実行します。

サンプルテーブルの作成

サンプルテーブルを以下のように作成します。

ID 納品日 取引先名 請求額
1 1999/12/01 Akira商事 ¥2,556,210
2 1999/12/05 コーポレーションAkira ¥1,255,454
3 1999/12/10 あきら工務店 ¥655,100
4 1999/12/19 コーポレーションAkira ¥241,000
5 1999/12/20 コーポレーションAkira ¥321,200

TransferSpreadsheetメソッドの留意点

  1. 構文の途中にある引数を省略する場合、引数のカンマは省略できません。
  2. 後に続く引数を指定しない場合は、最後に指定した引数の後ろにはカンマは付けません。
  3. 実際にExcelへデータ出力する場合は、Accessのテーブル(tbl_sample)を C:\sample126.xls へ出力します。
  4. Excelファイルは、事前に作成する必要がありません。Accessが自動的に作成します。
  5. Excel側のシートは、エクスポート時にシート名を指定しなければ新規シートを自動的に作成します。

実行結果

下記のように、Excelへデータ転送が完了します。

フォームの作成

プロシージャの実行は、フォームを利用して行います。以下のようにフォームを作成します。

コマンドボタンのクリック時イベントプロシージャの作成

コマンドボタンのクリック時イベントに下記のようなプロシージャを記述します。

Private Sub コマンド0_Click()

    On Error GoTo エラー

    Dim strac As String
    Dim varxls As Variant
    Dim strmsg As String
    
    strac = "tbl_sample" 'Accessファイルを指定します。
    varxls = "C:\My Documents\sample_126.xls" 'エクセルファイルを指定します。
    strmsg = strac & " を、Excelファイルへ出力します。" & Chr(13) & _
             "出力先は" & varxls & "、 シート名は" & strac & "です。" & _
             Chr(13) & "よろしければ、OKをクリックして下さい。"
                
    If MsgBox(strmsg, vbOKCancel) = vbOK Then
        '最初のデータをフィールド名として使います。
        DoCmd.TransferSpreadsheet acExport, _
                    acSpreadsheetTypeExcel9, strac, varxls, True
        MsgBox "データ出力は、正常に完了しました。"
    End If
    
    Exit Sub
    
エラー:
    
    If Err.Number = 3044 Then
        MsgBox "パスの指定が誤っている可能性があります。", vbCritical
    Else
        MsgBox "予期せぬエラーが発生しました。", vbCritical
    End If

End Sub
解説
  1. acSpreadsheetTypeExcel9は、Excel2000になります。Excel97と2000が混在している場合は、acSpreadsheetTypeExcel8 にされた方が無難です。
留意点
  1. 転送が完了した後でも、Excelが自動的に立ち上がることはないので、以下のような完了メッセージを表示させた方がスッキリします。

  1. データ出力を複数回繰り返した場合でも、Excel側にデータが追加されることはありません。この点がインポートする場合と異なります。

ファイルを開くプロシージャの利用

発展型として、エクスポート先のExcelファイルをプロシージャに記述する必要がないように、WindowsAPIのファイルを開くプロシージャを用いて、 出力先のExcelファイルを選択できるようにします。

  1. 参考ファイルNo78の「WindowsAPIを用いてファイルを開く方法」から、サンプルファイルをダウンロードします。
  2. モジュール「Module_API_ファイルを開く」をインポートします。
  3. モジュール「Module_API_ファイルを開く」をデザインビューで開きます。
  4. 下記箇所を変更します。なお、変更箇所はプロシージャ Function GetFile(strSearchPath) As String の中にあります。
ACC_CreateFilterString("jpgファイル(*.jpg)", "*.jpg", "gifファイル(*.gif)", _
"*.gif", "bmpファイル(*.bmp)", "*.bmp", "すべてのファイル(*.*)", "*.*")
ACC_CreateFilterString("xlsファイル(*.xls)", "*.xls", _
"すべてのファイル(*.*)", "*.*")

コマンドボタンのクリック時イベントプロシージャの一部変更

コマンドボタンのクリック時イベントに以下のようなプロシージャを記述します。
Private Sub コマンド0_Click()

    On Error GoTo エラー

    Dim strac As String
    Dim varxls As Variant
    Dim strmsg As String

    strac = "tbl_sample" 'Accessテーブルを指定します。
    varxls = GetFile("") '「Module_API_ファイルを開く」を呼び出します。
    strmsg = strac & " を、Excelファイルへ出力します。" & Chr(13) & _
             "出力先は" & varxls & "、 シート名は" & strac & "です。" & _
             Chr(13) & "よろしければ、OKをクリックして下さい。"
                
    If varxls = "" Then MsgBox "ファイルを選択して下さい。": End
                
    If MsgBox(strmsg, vbOKCancel) = vbOK Then
        '最初のデータをフィールド名として使います。
        DoCmd.TransferSpreadsheet acExport, _
                    acSpreadsheetTypeExcel9, strac, varxls, True
        MsgBox "データ出力は、正常に完了しました。"
    End If
    
    Exit Sub
    
エラー:
    
    MsgBox "予期せぬエラーが発生しました。", vbCritical

End Sub
解説
  1. ファイルを開くダイアログが開きますから、エクセルファイルを指定します。

関連ページ

ページの先頭へ 前ページへ戻る

 


Excelへデータを出力する方法 - TransferSpreadsheetメソッド:SampleFile126


 

-Microsoft Access Club-