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

DDE を用いてExcelファイルにテーブルデータを書き込む方法 : SampleFile246



DDE(ダイナミック データ エクスチェンジ、Dynamic Data Exchange) を利用すると、AccessからExcelにアクセスし、AccessのテーブルデータをExcelファイルに書き出すことが可能になります。

Excelファイルの作成

今回、DDEを用いて、AccessのテーブルデータをExcelのワークブックに書き込みます。 サンプルファイルを実行する前に、Cドライブにエクセルファイル Good.xls を作成します。このExcelファイルにはデータは不要です。

 

DDE

 Windows上でアプリケーションソフト同士がデータやコマンドを行なうための手順の一つ。Windows 2.0から実装されているが、OLEなどに取って代わられ、現在ではあまり使われていない。

IT用語辞典 e-Words

留意点

現在では、DDEを用いずOLEを使用した方が、アプリの組み方でいろんな選択肢を用いることができます。

 

OLE

Windowsにおいて、アプリケーションソフト間でデータを転送・共有するための仕組み。

 OLEを使うことによって、あるアプリケーションソフトで作成している文書の中に、別のアプリケーションソフトで作成した情報を埋め込んだり、別のアプリケーションソフトの機能をあたかも自分の機能であるかのように提供することができるようになる。

 1991年に登場したOLE 1.0はWindows 3.1に搭載された。大幅に機能を拡張したOLE2が1993年に登場し、Windows 95に搭載された。1996年にはインターネットに対応するための機能を追加したものが登場し、名称も「ActiveX」に改められた。

 OLEを利用することにより、単独では実行できないが、特定の機能のみを持つ部品化された小さなソフトウェアを作成することができ、これをOLEコントロールと呼ぶ。

 OLEコントロールはアプリケーションソフトに機能を追加するのに利用される。企業が自社特有の処理をOLEコントロールとして作成し、市販のアプリケーションソフトに組みこんで使うことにより、0から専用のアプリケーションソフトを開発するよりも低コストにカスタムアプリケーションソフトを作成することができる

IT用語辞典 e-Words

  • ExcelをOLEで操作する場合は、CreatObject メソッド や GetObject メソッドを用いて行います。

DDEの流れ

DDE接続チャンネルを確立すると、後はExcelファイルを開くだけです。なお、DDEの流れは、

  1. Shell関数で、Excelを起動させる。
  2. ExcelとのDDE通信を開始する。(DDEInitiateメソッド)
  3. 目的のExcelファイルを開く。(DDEExecuteメソッド)
  4. Excelファイルにデータを書き込む。(DDEPokeメソッド)

この流れで進みます。

DDEExecute メソッド Excelファイルを開く

DDE接続を行うExcelファイルを事前に作成する必要があります。サンプルでは、CドライブにGood.xlsファイルを作成しています。

Functionプロシージャの作成
Function DDEExcelWrite()

On Error GoTo エラー

    Dim MyChan As Long
    Dim MyChan2 As Long
    Dim strExcelPath As String
    Dim strFilePath As String
    Dim intNo As Integer

    Dim CN As New ADODB.Connection
    Dim RS As New ADODB.Recordset
    Set CN = CurrentProject.Connection
    RS.Open "tbl_sample", CN, adOpenKeyset, adLockOptimistic

    'Excelのフルパスを記述します。
    strExcelPath = "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"
    'Excelファイルの保存パスを記述します。
    strFilePath = "C:\Good.xls"

    Shell strExcelPath, 1
    MyChan = DDEInitiate("Excel", "System")

    'Excelファイルを開きます。
    DDEExecute MyChan, "[open(""" & strFilePath & """)]"

    'Sheet1とDDE接続を確立します。
    MyChan2 = DDEInitiate("Excel", "Sheet1")

    Do Until RS.EOF
        intNo = intNo + 1
        DDEPoke MyChan2, "R" & intNo & "C1", RS!ID
        DDEPoke MyChan2, "R" & intNo & "C2", RS!取引先
        DDEPoke MyChan2, "R" & intNo & "C3", RS!売上金額 & "円"
        RS.MoveNext
    Loop

    RS.Close
    Set RS = Nothing
    CN.Close
    Set CN = Nothing

    DDETerminate MyChan
    DDETerminate MyChan2
    
Exit Function

エラー:

    MsgBox "予期せぬエラーが発生しました" & vbNewLine & _
            Err.Number & " : " & Err.Description
    End

End Function

解説

  1. Accessのテーブルデータ(tbl_sample)の書き込みは、ADOを用いています。
  2. サンプルは、WindowsXP、Office2003で作成しました。ご自分のPC環境に合わせて、Excelのフルパスを書き換えて下さい。

DDEPokeメソッド

DDEPokeメソッドは、DDE接続の相手方(今回ではExcel側)にデータを書き込みます。

        DDEPoke MyChan2, "R" & intNo & "C1", RS!ID
        DDEPoke MyChan2, "R" & intNo & "C2", RS!取引先
        DDEPoke MyChan2, "R" & intNo & "C3", RS!売上金額 & "円"
DDEPoke MyChan2, "R" & intNo & "C1", RS!ID
  1. MyChan2 : DDE接続チャンネルです。
  2. "R" & intNo & "C1"  :  RICIとは、セルA1のことです。intNoは初期値1の変数ですから、Loopを用いて1,2,3,・・・と移動します。つまり、A1、A2、A3,・・・とセルが移動します。
  3. RS!ID  :  レコードセットのID値です。

単純に文字列をA1セルに書き込む場合などは、

  1. DDEPoke MyChan2, "R1C1", "テスト"

と、します。

サンプル例

下図は、DDEPokeメソッドを用いて書き込んだ一例です。

CreatObject メソッド の利用(参考)

CreatObjectメソッドを用いて上記のプロシージャを書き換えると、下記のようになります。

Function ExcelCreateObject()

    On Error GoTo エラー
    
    Dim intNo As Integer
    Dim CN As New ADODB.Connection
    Dim RS As New ADODB.Recordset
    Set CN = CurrentProject.Connection
    RS.Open "tbl_sample", CN, adOpenKeyset, adLockOptimistic

    ' オブジェクトへの参照を格納するためにオブジェクト変数を宣言します。
    ' Dim as Object で宣言すると、実行時バインディングが行われます。
    Dim xl As Object
    Set xl = CreateObject("Excel.Sheet")

    ' Application オブジェクトから Excel のワークシートを表示します。
    xl.Application.Visible = True
    
    Do Until RS.EOF
        intNo = intNo + 1
        xl.Application.Cells(intNo, 1).Value = RS!ID
        xl.Application.Cells(intNo, 2).Value = RS!取引先
        xl.Application.Cells(intNo, 3).Value = RS!売上金額 & "円"
        RS.MoveNext
    Loop
    
    ' ワークシートをファイル C:\Good.xls に保存します。
    xl.SaveAs "C:\Good.xls"
    ' Application オブジェクトの Quit メソッドで Excel を終了します。
    xl.Application.Quit
    
    RS.Close
    Set RS = Nothing
    CN.Close
    Set CN = Nothing
    
    ' オブジェクト変数を解放します。
    Set xl = Nothing

    Exit Function

エラー:

    MsgBox Err.Description
    Exit Function

End Function

関連ページ

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

 


DDE を用いてExcelファイルにテーブルデータを書き込む方法 : SampleFile246


 

-Microsoft Access Club-