ryhmrt’s blog

意識低い系プログラマの雑記

Accessはまりどころ

昔、Accessで仕事してたときのバッドノウハウのメモを発掘。

今度久々にAccessの仕事をすることになりそうなのだ。

読み返してたら、最近治まっていたマイクロソフト嫌いが再燃しそうになった。

単票フォームで既存レコードを表示している際、マウスホイールを回すと新規レコードに移動する。

AllowAdditions = False で回避できる。

チェックボックスでスペースキーを押すとフォーカスが移動する。

IMEがオンになっているとそうなる。 面倒だが、各チェックボックスのKeyPressで

If KeyAscii = 12288 Then
  キャンセル.Value = Not キャンセル.Value
  modified = True
End If
KeyAscii = 0

とするとうまくいった。

SQLを直接編集し、JOINを複数書くと構文エラーで怒られる。

JOINする毎に括弧で囲む

Filter設定してあるのに有効にならない。

Openイベントあたりで FilterOn = True

OrderBy設定してあるのに有効にならない。

Openイベントあたりで OrderByOn = True

日付のみの値と時刻が入った値を比較すると変な感じ。

精度変換はされず、日付のみの値は00:00:00として扱われるっぽい。

オブジェクトのリンクエラーが出る。

一度新しいバージョンのAccessで開いたMDBファイルを、古いバージョンのAccessで開くと、わけのわからんオブジェクトのリンクエラーとかいうのが出ることがある。

ライブラリの参照が新しいバージョン向けに書き換わってしまうのが原因。

スクリプトエディタの参照設定を開いて、参照不能となっているライブラリのチェックを外すとうまくいくかも。

Excelファイルを扱う処理のあるMDBファイルについては、エラーも何も表示されずに処理が止まることも。その場合にも、同じように参照設定を開き、Excelライブラリの参照を動作環境のバージョンのものに修正する。

または、コードアシストが使えず、定数も参照できず面倒だが、Excel.ApplicationではなくObjectとして扱うことで参照を追加しないで済ませられる。

Dim AppExcel As Object
Set AppExcel = CreateObject("Excel.Application")

実際の中身はExcel.Applicationなので、宣言とオブジェクト生成以外は同じ使い方。

なんか知らないけどAccessが落ちるようになった。

MDBファイルをこまめにバックアップしておき、落ちないファイルに戻す。

OfficeのVBAエディタでマウススクロールできない

AccessのコードとかExcelのマクロの編集画面では、標準ではマウススクロールが有効にならない。

MSのFAQに「Mouse wheel events do not work in the Visual Basic 6.0 IDE」ってのがあって、ここに対策方法が載ってる。

行番号も表示されなかったりして、VBAのエディタには疑問だらけ。