VBA DoCmd.FindRecordについて [VBA]
DoCmd.FindRecordの記事を書こうと思って、サンプルプログラムを作っていたのですが、どうにもうまくいきません。
私的には、DoCmd.FindRecordの利用は非推奨なので、パスして他の記事を書こうかと思いましたが、いちおういろいろやってみたので、そのことについて書いておこうと思います。
純粋にDoCmd.FindRecordについて知りたい方、申し訳ありませんが、ここにご希望の内容はありません。ご了承下さい。
同じような検索であれば、DAOのFindFirstを使うのが良いかと思います。
・構文
DoCmd.FindRecord FindWhat , Match , MatchCase , Search , SearchAsFormatted
, OnlyCurrentField , FindFirst
・引数
FindWhat 必須
検索する数値・文字列を設定します。
Match
一致と判断する検索方法を、以下のacEntireクラスから指定します。
名前 | 値 | 説明 |
acAnywhere | 0 | FindWhatとフィールドの一部が一致した場合 |
acEntire | 1 | FindWhatとフィールド全体が一致した場合 |
acStart | 2 | FindWhatがフィールドの先頭から一部一致した場合 |
デフォルトはacEntireです。
MatchCase
大文字と小文字を区別するかどうかを指定します。
Trueなら区別します。デフォルトはFalse(区別しない)です。
Search
検索を行う方向を指定します。
以下のAcSearchDirectionクラスから指定します。
名前 | 値 | 説明 |
acDown | 1 | カレントレコードより下のすべてのレコードを検索します。 |
acSearchAll | 2 | すべてのレコードを検索します。 |
acUp | 3 | カレントレコードより上のすべてのレコードを検索します。 |
デフォルトはacSearchAllです。
SearchAsFormatted
書式化された形式で検索する場合にはTrue、データベースに保存されている形式で検索する場合はFalseを指定します。
デフォルトはFalseです。
OnlyCurrentField
検索対象となるフィールドを指定します。
以下のAcFindFieldクラスから指定します。
名前 | 値 | 説明 |
acAll | 0 | すべてのフィールドで検索します。 |
acCurrent | -1 | 現在のフィールドだけで検索します。 |
デフォルトはacCurrentです。
FindFirst
最初のレコードから検索を開始する場合は、Trueを指定します。
カレントレコードを次のレコードから検索を開始する場合は、Falseを指定します。
VBA 画面の描画を停止する・ステータスバーへのメッセージ表示 [VBA]
VBAで処理を行っている間、処理の内容によっては、その影響が画面に反映する場合があります。
VBAでやっていることを、画面上で見せたくない場合は、Application.Echoで画面の描画(書き換え)を停止することができます。
・構文
Application.Echo EchoOn, bstrStatusBarText
・EchoOn … 必須です。Trueなら描画ON、Falseなら描画OFFになります。
・bstrStatusBarText … ステータスバーテキストに表示する文字列を指定します。
以下に、例を示します。
Private Sub cmdEcho_Click() Application.Echo False, "処理中…" ' '…処理… ' Application.Echo True End Sub
VBA イベントのキャンセル [VBA]
ACCESSは、ユーザーの操作やACCESSの処理によって起きるイベントによって、処理が実行されています。
様々なイベントがありますが、一部のイベントは、VBAによってイベントの処理を取り消すことができます。
具体的にどんなことなのかは、以下の通り。
フォームが閉じるときの処理を、キャンセルする例です。
画面にコマンドボタンを配置し、クリックイベントに以下のコードを記述します。
Private Sub cmdClose_Click() On Error Resume Next DoCmd.Close acForm, Me.Name On Error GoTo 0 End Sub
次に、フォームの「読み込み解除時」イベントに、以下のコードを記述します。
Private Sub Form_Unload(Cancel As Integer) If MsgBox("フォームを閉じますか?", vbYesNo) = vbNo Then Cancel = True Exit Sub End If End Sub
VBA データベースを閉じる [VBA]
現在ACCESS開いているデータベースを閉じる方法です。
Application.CloseCurrentDatabaseメソッドで、現在のデータベースを閉じます。
データベースは閉じますが、ACCESSは終了しません。
例は以下の通り。
画面にボタンを作成し、クリック時イベントに以下のコードを記述します。
Private Sub cmdCloseDB_Click() Application.CloseCurrentDatabase End Sub
VBA フォーム・レポートを閉じる [VBA]
ACCESSでフォームを閉じる時は、DoCmd.Closeを使用します。
・書式
DoCmd.Close ObjectType, ObjectName, Save
・引数
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 | データマクロ |
よく使うのは、acForm、acReportくらいだと思います。
ObjectName
閉じるオブジェクトの名前を文字列で指定します。
フォームやレポートの名前です。
省略すると、現在アクティブなオブジェクトが閉じられます。
Save
変更を保存するかどうかを指定します。
以下のAcCloseSaveクラス定数から指定します。
名前 | 値 | 説明 |
---|---|---|
acSaveNo | 2 | 保存しない |
acSavePrompt | 0 | 確認を表示。 Visual Basic モジュールを閉じる場合は無視され、保存しない。 |
acSaveYes | 1 | 保存するされます。 |
まじめに指定するなら、acSaveNoが良いと思うのですが、制作中においては保存したい場合も多々あるので、acSavePromptが無難です。(私は省略しています。)