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

VBA フォーム上でレコードを検索する [VBA]

 フォーム上にデータ一覧を表示させ、指定された文字を含むレコードを検索し、そのレコードへ移動する方法です。
 この方法を活用する場面があるかどうかは分かりませんが、フォームのRecordsetは(通常)DAOであって、DAOのメソッドが利用できる、と言うことを知っておくと、いろいろ応用が利くと思います。

 解説用のフォームです。

 連結フォームを帳票フォームで作成し、データの一覧を表示させています。
 フォームの上部分の「検索」テキストボックスに文字を入力し、「先頭から検索」ボタンをクリックすると、都道府県名にその文字を含むレコードに移動するようにします。

続きを読む


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

続きを読む