FAQ
FAMOS
FAMOS全般top
└DDE通信
ID.
Q. ExcelからDDE通信できません
A.
Windows95上でExcel95,97を使用した場合、<DDEExecute>に問題があることが知られています。DDE (DDEML.DLL)を使用する全てのDDE-clients(AutoCad, FoxPro, CC:Mailなど)が影響されます。
(Windows NTでは問題ありません。また、他のDDEコマンド、Winword, Access etc..でも問題ありません)
この問題を回避するためには、Windows-API-Functionsを使用して直接FAMOSにコマンドを送出する必要があります。
' 例題:ExcelからFAMOSへのコマンド送信
' ExcelのDDEExecute問題について
' Windows95とFamos3.1で検証, Excel97で動作確認
' マクロを実行させる際にFAMOSが動作していなければなりません
Rem *** Windows Api
Functions の宣言
Declare Function FindWindowA Lib "User32" ( _
ByVal ClassName As String, _
ByVal Caption As String) As Long
Declare Function SendMessageA Lib "User32" ( _
ByVal Window As Long, _
ByVal Message As Integer, _
ByVal wParam As Integer, _
ByVal lParam As String) As Long
Declare Function PostMessageA Lib "User32" ( _
ByVal Window As Long, _
ByVal Message As Integer, _
ByVal wParam As Integer, _
ByVal lParam As String) As Long
Declare Function GetDlgItem Lib "User32" ( _
ByVal Window As Long, _
ByVal id As Integer) As Long
Sub DDETest()
DoFamosExecute("sequ 1.seq")
End Sub
Sub DoFamosExecute(Command As String)
Rem *** 最初にFamosオペレーションウィンドウを検索...
hwndFamos = FindWindowA("FAMOS3", "FAMOS")
hwndDlg = GetDlgItem(GetDlgItem(GetDlgItem(hwndFamos, 0), 1001), 0)
hwndOpBox = GetDlgItem(hwndDlg, 1070)
If (hwndOpBox <> 0) Then
Rem *** オペレーションウィンドウにテキストを設定
SendMessageA hwndOpBox, 12, 0, Command ' 12: WM_SETTEXT
Rem *** 実行ボタンをクリック
PostMessageA hwndDlg, 273, 1,"" ' 273: WM_COMMAND, 1: ID of OK-Button
' WINUSER.H
#define WM_COMMAND 0x0111
End If
End Sub