So-net無料ブログ作成
検索選択

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 データマクロ

 よく使うのは、acFormacReportくらいだと思います。

 ObjectName
 閉じるオブジェクトの名前を文字列で指定します。
 フォームやレポートの名前です。
 省略すると、現在アクティブなオブジェクトが閉じられます。

 Save
 変更を保存するかどうかを指定します。
 以下のAcCloseSaveクラス定数から指定します。

名前 説明
acSaveNo 2 保存しない
acSavePrompt 0 確認を表示。
Visual Basic モジュールを閉じる場合は無視され、保存しない。
acSaveYes 1 保存するされます。

 まじめに指定するなら、acSaveNoが良いと思うのですが、制作中においては保存したい場合も多々あるので、acSavePromptが無難です。(私は省略しています。)

続きを読む