文書番号: 401693
最終更新日: 1998/02/03
SysItems Access の System トピックのアイテムのリストを配列として得ることが できます。この時得られる文字列は、"SysItems","Formats","Status", "Topics" となります。 Formats Access がクリップボードにコピーできるフォーマットのリストを配列として 得ることができます。 Topics Access に対して DDE 通信を行う際に、現在接続が可能なトピックのリストを 配列として得ることができます。 Status 現在の Access の状態を配列として得ることができます。"Busy" もしくは "Ready" の文字列です。"Busy" の時は DDE 通信を行うことができません。
Chan = DDEInitiate("MSAccess","MINAMI.MDB")
このトピックがサポートするアイテム (項目名) は次の通りです。それぞれのオブジェクト名のリストを得ることができます。TableList 指定したデータベース内のテーブルのオブジェクト名のリストを配列として 得ることができます。 QueryList 指定したデータベース内のクエリーのオブジェクト名のリストを配列として 得ることができます。 FormList 指定したデータベース内のフォームのオブジェクト名のリストを配列として 得ることができます。 ReportList 指定したデータベース内のレポートのオブジェクト名のリストを配列として 得ることができます。 MacroList 指定したデータベース内のマクロのオブジェクト名のリストを配列として得る ことができます。 Modulelist 指定したデータベース内のモジュールのオブジェクト名のリストを配列として 得ることができます。
Chan = DDEInitiate("MSAccess","MINAMI.MDB;Table 銀行")
このトピックがサポートするアイテム (項目名) は次の通りです。
FieldNames
指定したテーブルのフィールド名のリストを配列として得ることができます。
FieldNames;T
フィールド名の文字列とそのデータ型を 2 次元配列として得ることができま
す。データ型は以下のような意味の値が返されます。
0 無効
1 Yes/No 型
2 バイト型
3 整数型
4 長整数型
5 通貨型
6 単精度浮動小数点型
7 倍精度浮動小数点型
8 日付/時間型
9 バイナリのデータ型 (最大 255 バイト)
10 ANSI の文字列 (最大 255 バイト)
11 OLE オブジェクト型
12 メモ型
All
フィールド名を含んだ全データを 2 次元配列として得ることができます。
Data
フィールド名を含まない全データを 2 次元配列として得ることができます。
NextRow
カレント レコードの次のレコードのデータを配列として得ることができま
す。DDEInitiate で接続した最初の状態で NextRow を実行すると、最初の
レコードのデータを得ることができます。カレント レコードが最後のレ
コードの状態で、NextRow を実行するとエラーになります。
また、NextRow を実行するとカレント レコードが一つ次のレコードに移動します。
PrevRow
カレント レコードの前のレコードのデータを配列として得ることができま
す。DDEInitiate で接続した最初の状態で PrevRow を実行すると最後のレ
コードのデータを得ることができます。接続直後以外の状態で、なおかつ
カレント レコードが最初のレコードの状態の時、PrevRow を実行すると
エラーになります。
また、PrevRow を実行するとカレント レコードが一つ前のレコードに移動します。
FirstRow
最初のレコード データを配列として得ることができます。
また、FirstRow を実行するとカレント レコードが最初のレコードに移動します。
LastRow
最後のレコードデータを配列として得ることができます。
また、LastRow を実行するとカレント レコードが最後のレコードに移動します。
FieldCount
フィールドの数を得ることができます。
SQLText
トピックで指定されている SQL 文を得るためのアイテムです。トピックにテー
ブル名、クエリー名、SQL 文を設定している時、DDERequest メソッドを実行する
と SQL 文を得ることができます。SQLText アイテムを使用し、DDEPoke メソッド
を実行するとエラーが発生します。
SQLText;n
トピック名で指定されている SQL 文を得るためのアイテムです。トピックに、
テーブル名、クエリー名、SQL 文を設定している時に指定します。DDERequest
メソッドを実行すると SQL 文を n バイトごとの文字列型の配列として得るこ
とができます。SQLText;n アイテムを使用して DDEPoke メソッドを実行する
ことエラーが発生します。
Chan = DDEInitiate("MSAccess","MINAMI.MDB;Query Q_価格表")
アイテムについては「 3. データベース ファイル名とテーブル名を指定する方法」のトピックと同じです。
Chan = DDEInitiate("MSAccess","MINAMI.MDB;SQL")
SQL 文を SQLText アイテムで指定した DDEPoke メソッドで送信し、All、Data等のアイテムで DDERequest メソッドを実行すると SQL 文の結果を得ることができます。
Chan = DDEInitiate("MSAccess","MINAMI.MDB;SQL Select * From 銀行;")
SQL 文には、最後に ; (セミコロン) をつけた 255 バイトまでの文字列を指定します。アイテムについては「 3. データベースファイル名とテーブル名を指定する方法」のトピックと同じです。メニューの追加 (AddMenu) メッセージ ボックス (MsgBox) アプリケーションの実行 (RunApp) プロシージャの実行 (RunCode) キー送信 (SendKeys) 値の代入 (SetValue) 全マクロの中止 (StopAllMacro) マクロの中止 (StopMacro)
OpenDatabase ファイル名,[排他モード],[リード/ライトモード]
ファイル名 データベースファイル名を指定します。パスも含めることが
できます。
排他モード Boolean 型で True(-1) 共有モードか、False(0) 排他モード
を指定します。
リード/ライトモードBoolean 型で True(-1) リードオンリーモードか、False(0)
リード/ライトモードです。
Option Base 1
Sub DDEGetSysItems()
Dim Items
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", "System")
Items = Application.DDERequest(chan, "SysItems")
For i = 1 To UBound(Items)
MsgBox Items(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetFormats()
Dim Formats
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", "System")
Formats = Application.DDERequest(chan, "Formats")
For i = 1 To UBound(Formats)
MsgBox Formats(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetTopics()
Dim Topics
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", "System")
Topics = Application.DDERequest(chan, "Topics")
For i = 1 To UBound(Topics)
MsgBox Topics(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetStatus()
Dim Status
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", "System")
Status = Application.DDERequest(chan, "Status")
For i = 1 To UBound(Status)
MsgBox Status(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetDBTableNames()
Dim Tables
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", "MINAMI.MDB")
Tables = Application.DDERequest(chan, "TableList")
For i = 1 To UBound(Tables)
MsgBox Tables(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetDBQueryNames()
Dim Querys
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", "MINAMI.MDB")
Querys = Application.DDERequest(chan, "QueryList")
For i = 1 To UBound(Querys)
MsgBox Querys(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetDBFormNames()
Dim Forms
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", "MINAMI.MDB")
Forms = Application.DDERequest(chan, "FormList")
For i = 1 To UBound(Forms)
MsgBox Forms(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetDBReportNames()
Dim Reports
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", "MINAMI.MDB")
Reports = Application.DDERequest(chan, "ReportList")
For i = 1 To UBound(Reports)
MsgBox Reports(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetDBMacroNames()
Dim Macros
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", "MINAMI.MDB")
Macros = Application.DDERequest(chan, "MacroList")
For i = 1 To UBound(Macros)
MsgBox Macros(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetDBModuleNames()
Dim Modules
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", "MINAMI.MDB")
Modules = Application.DDERequest(chan, "ModuleList")
For i = 1 To UBound(Modules)
MsgBox Modules(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetDBTableFields()
Dim FieldNames
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", _
"MINAMI.MDB;Table 銀行")
FieldNames = Application.DDERequest(chan, "FieldNames")
For i = 1 To UBound(FieldNames)
MsgBox FieldNames(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetDBTableFieldNamesAndType()
Dim FieldNamesType
Dim chan
Dim i, a As Integer
chan = Application.DDEInitiate("MSAccess", _
"MINAMI.MDB;Table 銀行")
FieldNamesType = Application.DDERequest(chan, _
"FieldNames;T")
For i = 1 To UBound(FieldNamesType)
For a = 1 To UBound(FieldNamesType, 2)
MsgBox FieldNamesType(i, a)
Next a
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetDBTableAllData()
Dim DBData
Dim chan
Dim i, a As Integer
Dim RecordData As String
Dim wksheet As Worksheet
chan = Application.DDEInitiate("MSAccess", _
"MINAMI.MDB;Table 銀行")
DBData = Application.DDERequest(chan, "All")
Application.DDETerminate chan
'メッセージ表示処理
For i = 1 To UBound(DBData)
'表示用文字列変数の初期化
RecordData = ""
For a = 1 To UBound(DBData, 2)
'表示用文字列の整形
RecordData = RecordData & DBData(i, a) & Chr(10)
Next a
'レコードの表示
MsgBox RecordData
Next i
'ワークシートへのデータ転送処理
Set wksheet = ThisWorkbook.Worksheets("Sheet1")
wksheet.Range(wksheet.Cells(1, 1), _
wksheet.Cells(UBound(DBData), _
UBound(DBData, 2))).FormulaArray = DBData
End Sub
Sub DDEGetDBTableFieldCount()
Dim FieldCount
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", _
"MINAMI.MDB;Table 銀行")
FieldCount = Application.DDERequest(chan, "FieldCount")
For i = 1 To UBound(FieldCount)
MsgBox FieldCount(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEGetDBTableSQLText()
Dim SQLText
Dim chan
Dim i As Integer
chan = Application.DDEInitiate("MSAccess", _
"MINAMI.MDB;Table 銀行")
SQLText = Application.DDERequest(chan, "SQLText")
For i = 1 To UBound(SQLText)
MsgBox SQLText(i)
Next i
Application.DDETerminate chan
End Sub
Sub DDEExecuteMacro()
Dim chan
chan = Application.DDEInitiate("MSAccess", "MINAMI.MDB")
Application.DDEExecute chan, "AutoExec.サンプル"
Application.DDETerminate chan
End Sub
Sub DDEExecuteSQL()
Dim chan
Dim SQL As String
Dim AllData
Dim wksheet As Worksheet
SQL = "Select * from 銀行;"
chan = Application.DDEInitiate("MSAccess", _
"MiNAMI.MDB;SQL")
ThisWorkbook.Worksheets("Sheet1").Range("$D$1") _
.Value = SQL
'DDEPoke の第三引数には Range オブジェクトを指定しなければ
'なりません。
Application.DDEPoke chan, "SQLText", _
ThisWorkbook.Worksheets("Sheet1").Range("$D$1")
AllData = Application.DDERequest(chan, "All")
'ワークシートへのデータ転送処理
Set wksheet = ThisWorkbook.Worksheets("Sheet1")
wksheet.Range(wksheet.Cells(1, 1), _
wksheet.Cells(UBound(AllData), _
UBound(AllData, 2))).FormulaArray = AllData
Application.DDETerminate chan
End Sub
次の図のようにダイアログ ボックスの作成及びマクロの登録を行うと、リアルタイムにデータを参照することが可能になります。
![[GRAPHIC: ]](JP401693A.gif)
以下の例ではダイアログ ボックスがオープンされる時に DDE 通信の開始を行い、ダイアログボックスが閉じられる時 (<終了> ボタンが押された時) に DDE 通信を終了しています。また、それぞれのボタンが選択された時にそれぞれの動作に適したデータを取得しエディット ボックスに値を転送しています。
Dim chan
Sub DDESampleForm_Load()
Dim datas
chan = DDEInitiate("MSAccess", "MINAMI.MDB;Table 銀行")
datas = DDERequest(chan, "FirstRow")
ActiveDialog.EditBoxes("銀行名").Text = datas(1)
ActiveDialog.EditBoxes("口座種別").Text = datas(2)
ActiveDialog.EditBoxes("口座番号").Text = datas(3)
End Sub
Sub EndButton_Click()
Application.DDETerminate chan
ActiveDialog.Hide
End Sub
Sub FirstButton_Click()
Dim datas
datas = Application.DDERequest(chan, "FirstRow")
If StrComp(TypeName(datas), "Error") = 0 Then
Exit Sub
End If
ActiveDialog.EditBoxes("銀行名").Text = datas(1)
ActiveDialog.EditBoxes("口座種別").Text = datas(2)
ActiveDialog.EditBoxes("口座番号").Text = datas(3)
End Sub
Sub NextButton_Click()
Dim datas
datas = Application.DDERequest(chan, "NextRow")
If StrComp(TypeName(datas), "Error") = 0 Then
Exit Sub
End If
ActiveDialog.EditBoxes("銀行名").Text = datas(1)
ActiveDialog.EditBoxes("口座種別").Text = datas(2)
ActiveDialog.EditBoxes("口座番号").Text = datas(3)
End Sub
Sub PrevButton_Click()
Dim datas
datas = Application.DDERequest(chan, "PrevRow")
If StrComp(TypeName(datas), "Error") = 0 Then
Exit Sub
End If
ActiveDialog.EditBoxes("銀行名").Text = datas(1)
ActiveDialog.EditBoxes("口座種別").Text = datas(2)
ActiveDialog.EditBoxes("口座番号").Text = datas(3)
End Sub
Sub LastButton_Click()
Dim datas
datas = Application.DDERequest(chan, "LastRow")
If StrComp(TypeName(datas), "Error") = 0 Then
Exit Sub
End If
ActiveDialog.EditBoxes("銀行名").Text = datas(1)
ActiveDialog.EditBoxes("口座種別").Text = datas(2)
ActiveDialog.EditBoxes("口座番号").Text = datas(3)
End Sub
Keywords: KBHOWTO KB401693
Technology: kbExcel500 kbExcelSearch kbExcelWinSearch