FAMOS
FAMOS全般top
└ DDE通信
QExcelとのDDE通信の例
FAQ ID:g036
;値を取得する
a = DDEInq( "EXCEL", "Sheet1", "R3C2", 1)
;ブック名を指定して値を取得する
a = DDEInq( "EXCEL", "[Book2]Sheet1", "R3C2", 1)
;新規ブック作成
Err = DDESend( "EXCEL", "SYSTEM", "[NEW(1)]")
;マクロを実行する
Err = DDESend( "EXCEL", "SYSTEM", "[RUN("+ SvtoChar(34) + "book1.xls!macro1" + SvtoChar(34) + ")]")
;指定したセルを選択状態にする
Err = DDESend( "EXCEL", "SYSTEM", "[SELECT("+ SvtoChar(34) + "R1C1" + SvtoChar(34) + ")]")
;セルを挿入する
Err = DDESend( "EXCEL", "SYSTEM", "[INSERT(1)]")
;Excel上で指定したキーの並びが押されたかのような動作をさせる
Err = DDESend( "EXCEL", "SYSTEM", "1243{ENTER}")
;保存
Err = DDESend( "EXCEL", "SYSTEM", "[Save]")
;印刷
Err = DDESend( "EXCEL", "SYSTEM", "[Print]")
;名前を付けて保存する
Err = DDESend( "EXCEL", "SYSTEM", "[Save.As(" + SvToChar(34) + "d:\tmp\bbb.xls" + SvToChar(34) + ")]")
;ファイルを開く
Err = DDESend( "EXCEL", "SYSTEM", "[Open(" + SvToChar(34) + "d:\tmp\bbb.xls" + SvToChar(34) + ")]")
;ファイルを閉じる
Err = DDESend( "EXCEL", "SYSTEM", "[Close]")
;Excelを閉じる
Err = DDESend( "EXCEL", "SYSTEM", "[Quit]")
;切り取り
Err = DDESend( "EXCEL", "SYSTEM", "[cut("+ SvtoChar(34) + "R3C2" + SvtoChar(34) + ")]")
;貼り付け
Err = DDESend( "EXCEL", "SYSTEM", "[Paste("+ SvtoChar(34) + "R5C3" + SvtoChar(34) + ")]")
QDDE通信でFFTアナライザー"OROS"をコントロールする方法
FAQ ID:g028
FFTアナライザーOROSはDDE通信機能を備えていますので、FAMOSからOROSをコントロールすることができます。
サンプル
;解析を開始します--------------------------
err = DDESend( "FP4","Frm_dde","RUN 1")
;解析を停止します--------------------------
err = DDESend( "FP4","Frm_dde","STOP")
;動作状態取得--------------------------
err = DDESend( "FP4","Frm_dde","GET_STATUS")
State = DDEInq( "FP4","Frm_dde","Text_STATUS",1)
;結果の転送(その1)----------------------------
err = DDESend( "FP4","Frm_dde","TRA S,0")
;結果の転送(その2)----------------------------
err = DDESend( "FP4","Frm_dde","EXPORT_RESULT 0,0,test")
注意
アプリケーション名(”FP4”)は各解析モードに応じて変わります。
以下の手順でアプリケーション名を取得してください。
- OROSをインストールしたディレクトリー内の"OR76X.INI"ファイルを開く
- セクション"ANALYZER"のキー"Mode"の値を取得する
- OROSをインストールしたディレクトリー内の"OR25.INI"ファイルを開く
- ”MODE ”と2で取得した文字列を連結したセクションとキー”App”から値を取得
【OR76.INI】
[ANALYZER]
Mode=0 FP4 1.14
【OR25.INI】
[Mode 0 FP4 1.14]
Caption=Real Time FFT Analyzer
Number=&H1&
App=FP4
QDDE通信で小数点以下6桁が転送できない
QDDE通信でExcelにデータを転送できますか?(メニューを使用:FAMOS ⇒ Excel)
FAQ ID:g050
メニュー”エクストラ / DDE”を選択して、以下のダイアログを表示させます。
項目 | 設定 | 備考 |
---|---|---|
処理 | テキストとしてデータを送る | |
アプリケーション | Excel | アプリケーション名はそれぞれのソフトウェアで決まっています。各アプリケーションのマニュアルを参照してください。 |
トピック | Sheet1 | Excelの場合、シート名を指定します。 |
アイテム | R1C1:R10C1 | Excelの場合、セル位置を指定します。 この例ではA列の1~10行目までにデータを転送します。 |
FAMOS変数 | sintest1 | 転送したい変数を指定します。 |
結果は以下のようになります。
【注意】
DDE通信ではテキストとしてデータを他のアプリケーションに転送します。
そこで、文字の区切りコードなどを他のアプリケーションにあわせて変更する必要があります。
その方法は、上のダイアログの<オプション>ボタンを押してください。
以下のダイアログで、数値の精度や区切り文字などを指定することができます。
例えば、Excelでは行方向にデータを区切る場合、<CR>+<LF>が必要になります。
また、列方向にデータを転送する場合、<TAB>で区切ります。
(これはEXCELの規則です。こちらを参考にしてください。)
QDDE通信でExcelにデータを転送できますか?(メニューを使用:Excel ⇒ FAMOS)
FAQ ID:g052
メニュー”エクストラ / DDE”を選択して、以下のダイアログを表示させます。
項目 | 設定 | 備考 |
---|---|---|
処理 | データを要求 | |
アプリケーション | Excel | アプリケーション名はそれぞれのソフトウェアで決まっています。各アプリケーションのマニュアルを参照してください。 |
トピック | Sheet1 | Excelの場合、シート名を指定します。 |
アイテム | R1C1:R10C1 | Excelの場合、セル位置を指定します。 この例ではA列の1~10行目までにデータを転送します。 |
FAMOS変数 | test | 転送されたデータをFAMOS変数とします。 |
結果は以下のようになります。
QDDE通信でExcelにデータを転送できますか?(区切り文字について)
FAQ ID:g002
How To Pass Numbers to a Named Range in Excel through DDE
Last reviewed: November 2, 1995
Article ID: Q45714
The information in this article applies to:
- Microsoft Windows Software Development Kit (SDK) versions 3.0 and 3.1
- Microsoft Win32 Application Programming Interface (API) included with:
· - Microsoft Windows NT versions 3.5 and 3.51
· - Microsoft Windows 95 version 4.0
To send an array to Excel via DDE, you must send the array in TEXT, CSV, or BIFF clipboard format.
For example, if you want to send three numbers for one ROW in CSV format, use 1,2,3 (where each number is separated by a comma). If you want to place three numbers in one COLUMN in CSV format, place the CR/LF (Od 0a) (carriage return/line feed) characters after each number in the set.
If you would like to send the numbers via the TEXT format separated into columns, place the CR/LF characters between each number in the set. To organize the numbers into one row, place a TAB (09) character between each number.
In order to send an array of data into a named range, use the following steps:
1. Highlight the appropriate cells in Excel
2. Set up your typical hot link from Excel, for example:
=Service|Topic!Item
· Instead of hitting Enter after typing the above, hit Ctrl+Shift+Enter. This will cause your data to come in as an array, rather than as a single item.
NOTE: To do the reverse of this, that is, for a client application to POKE data to Excel, the client will have to specify an item name of say, "R1C1:R1C2" to poke an array of data to the range R1C1..R1C2.
QExcelからDDE通信できません
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