0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AccessVBA ユーザーインターフェース周り小ネタ

Last updated at Posted at 2021-06-09

1. 定型入力エラー時のエラーダイアログを置き換える

定型入力エラー時、Access標準の不親切な?ダイアログが表示されるので、これをもっと親切なものに置き換える。
image.png

①FormのErrorイベントで、エラーが発生した項目名&エラーNoを特定。
 今回の場合、エラーNo.2279:「アプリケーション定義またはオブジェクト定義のエラーです」

②新しく定義しなおしたエラーメッセージを表示

③Errorイベントの引数Responceに処理継続(acDataErrorContinue)、DataErrにエラーなし(0)を設定。
 RunCommandでアンドゥを実行。
 エラーの原因となったデータ修正を元に戻す。

Private Sub Form_Error(DataErr As Integer, Response As Integer)

  If DataErr = 2279 And _
    Screen.ActiveControl.Name = "機器ID" Then                ・・・①
     Msgbox "入力内容のエラーです", vbExclamation + vbOkOnly, "入力エラー"  ・・・②
    Response = acDataErrContinue                       ・・・③
    DataErr = 0
    DoCmd.Runcommand acCmdUndo
    Me![機器ID].SetFocus
  End If

End Sub

2. 帳票形式フォームで、カレント行をハイライト表示する

ネットで検索すると、上位に出てくるのは軒並み「条件付き書式」を使った方法。
ただこれだと、画面が非常にちらついて、ときに画面操作にも悪影響を及ぼすことがあって。

で、参考にさせていただいたのはこちら(↓)。
hatena chips:カレント行の背景色の変更 その3

非常に参考になりましたが、筆者的にちょっとアレンジしたのは次の2点。

  1. 交互に行の色を変える設定に対応するため、データを表示するテキストボックスの背景色は色なしのまま。
     最背後に設定したテキストボックスのフォントの色を、ハイライト表示の色に設定。
  2. 最背面に設定したテキストボックスで、コントロールソースに設定している式中の"g"は、フォームの幅に応じて調整。

ちなみに、筆者の職場の環境(Windowos10 Pro/Access2013)でもちらつきは激減し、快適に動いております。


3. URLを指定して表示

これまでよくあったんは、さしずめIEをオブジェクト参照するこのパターンかな?

Private Sub URL表示_Click()

    Dim ret As Integer, objIE0 As Object

    If IsNull(Me![URL]) Then Exit Sub

    Set objIE0 = CreateObject("InternetExplorer.Application")
    objIE0.Visible = True
    objIE0.Navigate Me![URL]

End Sub

が、これではいまさらの?IEしか対応でけへんし:frowning2:
いろいろ調べたら、Windows Scripting Hostを使うこんな方法があるらしいです。

Private Sub URL表示_Click()

   Dim objWSH As Object
    
    Set objWSH = CreateObject("WScript.Shell")
    objWSH.Run Me![URL], 1

End Sub

へぇー、これやとIEに限らず、標準のブラウザで指定したURLを開けるようです。


4. サブフォームの特定項目にフォーカスを当てる

意外とやる機会ない?かもしれませんが、いったんサブフォームのオブジェクト自体にフォーカスを移して、さらにその中の個別項目をSetFocusします。

    Me![サブフォーム].SetFocus
    Me![サブフォーム].Form![サンプルサブフォーム]![ID].SetFocus
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?