So-net無料ブログ作成

VBA クエリを実行する DoCmd.RunSQL [VBA]

 VBAからクエリを実行する方法のひとつとして、DoCmd.RunSQLがあります。
 他に、クエリを実行する方法として、DoCmd.OpenQueryがありますが、下記のような違いがあります。

DoCmd.OpenQueryは、あらかじめ作成されたクエリを指定して実行します。
DoCmd.RunSQLは、作成されたクエリを指定して実行することはできません。

DoCmd.RunSQLは、パラメタに指定されたSQL文を実行します。
DoCmd.OpenQueryは、実行するSQL文をクエリとして登録しておく必要があります。

DoCmd.OpenQueryは、選択クエリ(SELECT)、アクションクエリ(UPDATEなど)を実行できます。
DoCmd.RunSQLは、アクションクエリ(UPDATEなど)のみ実行できます。

DoCmd.OpenQueryで選択クエリ(SELECT)を指定した場合、結果がデータシートで表示されます。
DoCmd.RunSQLは、選択クエリ(SELECT)を実行できません。

 上記のことから、DoCmd.RunSQLの使いどころは、VBAでアクションクエリのSQLを作成し、それを実行する場合になるかと思います。

・構文
DoCmd.RunSQL SQLStatement , UseTransaction

・引数
SQLStatement ・ SQL文を文字列で指定します。
 実行可能なSQLは、INSERT INTO、DELETE、SELECT...INTO、UPDATE、CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE INDEX、DROP INDEXです。

UseTransaction ・ トランザクションに含める場合、Trueを指定します。デフォルトFalse
 リファレンスにこう書いてあるので、トランザクション処理ができそうな感じがするのですが、DoCmdでトランザクション処理を行う方法はわかりません…。(できないっぽい)

続きを読む


VBA クエリを実行する DoCmd.OpenQuery [VBA]

 VBAからクエリを実行する方法は、いくつかありますが、ここではDoCmd.OpenQueryを説明します。

 ナビゲーションウィンドウ(2003以前はデータベースウィンドウ)から、クエリをダブルクリックしたときと同じ動作をさせる場合は、DoCmd.OpenQueryを使用します。

・構文
DoCmd.OpenQuery QueryName , View , DataMode

・引数
QueryName ・ 開く(実行する)クエリの名前を文字列で指定します。必須。

View ・ クエリをどのビューで開くか、下記のAcViewクラス定数で指定します。省略可。

名前 説明
acViewDesign 1 デザイン ビュー
acViewLayout 6 レイアウト ビュー
acViewNormal 0 (既定値) 標準表示
acViewPivotChart 4 ピボットグラフ ビュー
acViewPivotTable 3 ピボットテーブル ビュー
acViewPreview 2 印刷プレビュー
acViewReport 5 レポート ビュー

 普通にクエリを開く場合は、acViewNormalです。

DataMode ・ クエリを開いて表示されたデータシートに対する入力モードを、下記のAcOpenDataModeクラス定数で指定します。省略可。

名前 説明
acAdd 0 新規レコードの追加のみ。
データシートにクエリの結果が表示されず、新規追加の行のみ表示されます。
クエリの結果を参照したり、編集したりはできません。
acEdit 1 クエリの結果の参照、および編集(追加)ができます。(既定値)
普通にクエリを開いたときの状態です。
acReadOnly 2 クエリの結果の参照のみ可能です。
編集や追加はできません。

続きを読む


VBA ウィンドウを切り替える [VBA]

 複数のウィンドウを開いた状態で、目的のウィンドウに切り替える方法です。
 切り替えたいウィンドウがフォームの場合は、SetFocusが使えますが、その他のテーブル・クエリなどは、SetFocusメソッドがありませんので、この方法は使えません。

 テーブル・クエリなどのウィンドウに切り替えたい場合は、DoCmd.SelectObjectを使用します。

・構文
DoCmd.SelectObject ObjectType , ObjectName , InNavigationPane

・引数

ObjectType … 必須。オブジェクトの種類を、AcObjectTypeクラスの定数で指定します。

名前 説明
acDatabaseProperties 11 Database プロパティ
acDefault -1  
acDiagram 8 データベースダイアグラム (Access プロジェクト )
acForm 2 フォーム
acFunction 10 関数
acMacro 4 マクロ
acModule 5 モジュール
acQuery 1 クエリ
acReport 3 レポート
acServerView 7 サーバー ビュー
acStoredProcedure 9 ストアドプロシージャ (Access プロジェクト )
acTable 0 テーブル
acTableDataMacro 12 データ マクロ



ObjectName … 選択するオブジェクトの名前を文字列で指定します。

InNavigationPane … データベースウィンドウの項目を選択する場合はTrue、開いているウィンドウを選択する場合はFalse(既定値)を指定します。

 例えば、テーブル「TMTDFK」を選択する場合は、
DoCmd.SelectObject acTable, "TMTDFK", False
 と、します。

 現在のウィンドウが最大化されていない状態で、最小化されているウィンドウを選択しても、ウィンドウは最小化されたままになります。
 この場合は、選択後DoCmd.Restoreなどを行う必要があります。


VBA ウィンドウの最大化 [VBA]

  ACCESSの中に表示されているウィンドウではなく、ACCESS自体のウィンドウを最大化する方法です。

・最大化
DoCmd.RunCommand acCmdAppMaximize

 その他、ACCESSウィンドウ操作関連です。

・最小化
DoCmd.RunCommand acCmdAppMinimize

・元のサイズに戻す
DoCmd.RunCommand acCmdAppRestore

 他に、ウィンドウサイズの変更、ウィンドウの移動を行う、
DoCmd.RunCommand acCmdAppMove
DoCmd.RunCommand acCmdAppSize

 も、あるのですが、パラメタを指定して、目的の状態にするのではなく、その操作を行う状態にするだけで、移動やサイズ変更の操作が必要になります。
 実質的に、これは使えないと思います。

 あと、DoCmd.RunCommandは、ACCESSのバージョンが古いと、使えないかも。
 確認は、2010で行っています。


VBA フォーカスを移動する [VBA]

 フォーカスは、現在操作対象となっているコントロールを示します。
 例えば、画面上にテキストボックスAと、テキストボックスBの、2つのテキストボックスが配置されているとします。
 テキストボックスAにフォーカスがある場合、キーボードから入力を行うと、その内容はテキストボックスAに入力されます。
 この時、テキストボックスBへ入力を行いたい場合は、フォーカスをテキストボックスBに移動させます。

 フォーカスを移動させるには、通常のユーザの操作では、目的のコントロールをマウスでクリックする、タブキーを押下する、などがあります。

 これをVBから行うには、SetFocusメソッドを使用します。
 テキストボックスA(txtA)にフォーカスを移動する場合は、

Me.txtA.SetFocus

 と、します。

 コントロールのメソッドなので、対象となるコントロールにSetFocusメソッドがある場合のみ使用可能です。
 入力系のコントロールであれば、テキストボックス(TextBox)、コンボボックス(ComboBox)、リストボックス(ListBox)、チェックボックス(CheckBox)などです。

 フォーカスを移動させようとしているコントロールが、フォーカスを受け取れない状態の場合は、エラーになります。
 Enabled(使用可能)プロパティがFalseの時などです。

続きを読む