マクロ中でDDE通信関数を使うと,WindowsのDDE機能を使って,Windows上のほかのアプリケーションのコマンドを実行できます。
DDE通信関数を使ったマクロコマンドの例を次に示します。このマクロコマンドを実行すると,Microsoft Excelで作成したファイル(c:¥tmp¥work.xls)の2行目の3列目にABCという文字列を入力します。
00000100 macro; "sample" ; ; "DDE サンプル マクロ" ;
00000200 param; 10.a.c(press enter key!)= "a" ;
00000300 define; ¥¥frtn.i= 0 ;
00000400 define; hdle.i= DDECNC(Excel : "system") ;
00000500 /* Excelが起動されていない? */
00000600 if; NE(&¥¥frtn : 0) ;
00000700 /* Excelを起動します */
00000800 define; rtn.i= SYSTEM("c:¥msoffice¥excel5¥excel.exe" : 0 : +0) ;
00000900 define; hdle.i= DDECNC(Excel : "system") ;
00001000 end if; ;
00001100 /* Excelのコマンドを実行します */
00001200 define; cmd1.c= "[OPEN(""c:¥tmp¥work.xls"")]" ;
00001300 define; cmd2.c= "[SELECT(""R2C3"")]" ;
00001400 define; cmd3.c= "[FORMULA(""ABC"")]" ;
00001500 define; rtn.i= DDEEXE(&hdle : &cmd1//&cmd2//&cmd3) ;
00001600 /* Excelとの対話を終了します */
00001700 define; rtn.i= DDEDSC(&hdle) ;
00001800 end;
00000300では,関数のエラーコードを得るためのシステム変数(¥¥frtn)を定義して,初期化しています。
00000400では,DDECNC関数でMicrosoft Excelとの対話を開設しています。ハンドル名はhdleという変数に格納します。対話を開設する場合のアプリケーション名やトピック名の詳細については,それぞれのアプリケーションのマニュアルなどを参照してください。
00000600から00001000では,Microsoft Excelが起動されていないためにDDECNC関数でエラーが発生した場合の処理を定義しています。システム変数に0(正常終了)以外の値が返った場合,SYSTEM関数でMicrosoft Excelを起動します。その後,再びDDECNC関数で対話を開設します。
00001500では,DDEEXE関数でMicrosoft Excelのコマンドを実行しています。アプリケーションのコマンドの詳細については,それぞれのアプリケーションのマニュアルなどを参照してください。
00001700では,DDEDSC関数でMicrosoft Excelとの対話を終了しています。