文書番号: 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
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 Sub18. ダイアログ ボックスを使用し、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