# ExcelVBAからのDDE接続

マニュアル > サーバ作成ガイド > インターフェース編 > DDEインターフェース > # ExcelVBAからのDDE接続 |

概要

ExcelのVBAによって開発した独自のDDEクライアントアプリケーションから、Panel ServerのDDEインターフェースに対して、DDE接続するための設定例及び、アプリケーションの作成例について解説します。

ここで紹介する手順としては、大きく分けて以下の３ステップです。

Step1.サーバ設定 | タグ登録設定を行います。
Step2.Excel VBAの基本設定 | Excel VBAからDDE接続などをする上で必要な定義を行います。
Step3.値の読み書き | EXcel VBAから任意のタイミングでアイテム値の読み書きを行えるようにします。

この機能のサンプルは、以下からご利用頂けます。

Step1.サーバ設定

準備としてタグの登録を行います。ここでは、仮想デバイスのタグを作成します。

1.左側のツリーの「Driver」を右クリックし「ユニット追加」を選択します。

2.「メモリ」の「仮想通信」「仮想デバイス」を選択し、「OK」を押します。

3.「U01」を右クリックし「フォルダ追加」を選択します。

4.「F01」を右クリックし「タグ追加」を選択します。

5.左側のリストから「T01」を右クリックし、「プロパティ」を選択します。

6.「アドレス設定」タブから「04 - D データレジスタ」を選択し、「OK」を押します。
※ここでは、D0000（ワードレジスタ）を数値タグ（整数バイナリ）として設定しています。

Step2.Excel VBAの基本設定

1.Excelを起動して、「開発」-「Visual Basic」からVisual Basic Editorを起動します。Excel VBAの編集は「Visual Basic Editor」から行います。

| 開発リボンはデフォルトでは表示されていない場合があるため、別途表示設定を行う必要があります。表示方法については、Excelのヘルプにてご確認ください。

2.「挿入」メニューの「標準モジュール」を選択する

3.モジュールが追加されるため、VBAの処理はここに記述を行う

Step3.値の読み書き

読み込み

1.「Module1」に以下のような定義を行う。

    Sub Test1()
        Dim chan As Variant
        Dim result As Variant
        chan = DDEInitiate("FASERVER", "U01.F01")
        result = DDERequest(chan, "T01")
        Range("B1").Value = result(1)
        DDETerminate (chan)
    End Sub

コマンドの詳細は以下のとおりです。

コマンド | 説明
DDEInitiate | DDE通信を開始するコマンドです。サーバのアプリケーション名と、トピック名を指定します。成功すると、DDE通信のチャネルを返します。このチャネルを利用して、他のDDE通信関連のコマンドを実行します。
DDERequest | サーバにデータを要求するコマンドです。アイテム名に、データを要求するデバイスを指定します。成功すると、要求したデータを配列で返します。
DDETerminate | DDE通信を終了するコマンドです。

2.読み込みを任意のタイミングで行えるように、読み込みようのReadボタンを配置する
ボタンの配置は「開発」タブの挿入から行います。
以下のようにボタンを配置します。

3.ボタンを右クリックして、マクロの登録を選択する

4.手順1で記述したプロシージャーを選択して、マクロの登録を行う
この設定で、ボタン押下で「Test1」のVBA処理が呼び出されます。

書き込み

1.「Module1」に以下のような定義を行う。

    Sub Test2()
        Dim chan As Variant
        Dim result As Variant
        chan = DDEInitiate("FASERVER", "U01.F01")
        DDEPoke chan, "T01", Range("A1")
        DDETerminate (chan)
    End Sub

コマンドの詳細は以下のとおりです。

コマンド | 説明
DDEPoke | サーバにデータを書き出すコマンドです。アイテム名に、データを書き出す対象のデバイスを指定します。

2.書き出した結果をすぐに確認できるように、「A1」以外の任意のセルに下記のDDE式を記入し、タグ「U01.F01.T01」の内容を表示させる

=FASERVER|U01.F01!T01

3.書き込みを行う
上記の式で現在値を表示させた後、「A1」にタグに書き込みたい値を入力し、キャレット（文字入力カーソル）を「Sub Test2()」から「End Sub」の間のどこかに移動して、「実行」メニューの「Sub/ユーザーフォームの実行」を選択してください。
VBAの実行により、DDE式を記入したセルの値がA1に入力した値で更新される事を確認してください。

(参考)配列を使ったExcelのサンプル

配列を使用する事で、１つのタグで大量のデータをブロックとして扱うことができます。特に多くのデバイスを扱う場合、１回ずつDDERequestやDDEPokeを呼び出す場合と比較して、明らかに高速に処理されます。ただし、Excelで配列を授受する場合は、配列サイズに制限がある場合があるため、注意してください。このサイズの制限についてはExcelのバージョンなどで変わる可能性があるため、制限の限界点を知る必要がる場合は、Microsoftへご確認ください。

この機能のサンプルは、以下からご利用頂けます。