DDE通信を使用しExcelからデータを取得 : Access

DDE(Dynamic Data Exchange)通信を使用し、Excelファイルを開き指定したシートの指定したセルからデータを取得します




BackHome BackTips Backメニュー

■ 取得するExcelシート
B列に日付、C列に曜日が入力されたカレンダーシートです。 この日付と曜日を取得します。
取得するExcelシート

■ 実行Accessフォーム
[Excelを開く]ボタンをクリックすると、DDE通信を開始し取得した日付と曜日をテキストボックスに表示します。
日付と曜日をテキストボックスに表示
■ DDE通信の流れ
  1. Shell関数でExcelを起動
  2. DDEInitiate関数で、DDEサーバーとソフトとの間で送受信するチャンネルを開く
  3. DDEExecute関数で、指定したファイルを開く
  4. DDEInitiate関数で、指定したシートと通信を開始する
  5. DDERequest関数で、セルを指定しデータを取得する
  6. DDETerminate関数で、終了

■ Access VBA 実行コード例

Option Compare Database
Option Explicit

Private Sub コマンド0_Click()
    Dim vret As Variant
    Dim lch As Long
    Dim v1 As Variant
    Dim i As Long
    Dim j As Long
    'Excel実行
    vret = Shell("C:\Program Files (x86)\Microsoft Office\Office14\excel.exe")
    'DDE通信開始
    lch = DDEInitiate("Excel", "system")
    '開くExcelファイルを指定し、開くを実行
    DDEExecute lch, "[open(""c:\dam11\calen.xlsx"")]"
    'Sheet1と通信します
    lch = DDEInitiate("Excel", "Sheet1")
    Me!テキスト3 = ""
    For i = 1 To 16
        For j = 1 To 3
            'i行・j列 からデータを取得
            v1 = DDERequest(lch, "R" & i & "C" & j)
            If v1 <> "" And Asc(v1) <> 13 Then
                Me!テキスト3 = Me!テキスト3 & Mid(v1, 1, Len(v1) - 1)
            End If
        Next
        If v1 <> "" And Asc(v1) <> 13 Then
            Me!テキスト3 = Me!テキスト3 & vbCrLf
        End If
    Next
    'DDE終了
    DDETerminate (lch)

End Sub

BackHome BackTips Backメニュー

Copyright(C) FeedSoft