|
些細な点をいくつか。
>If Not IsNull(cmb取引先) Then
cmb取引先というコンボボックス名ですが、ハンガリアン記法と呼ばれる命名法ですね。
これは、変数名やコントロール名に
変数のデータ型を示す接頭語やコントロールの種類を示す接頭語を付ける命名法です。
コンボボックスの接頭語ですが、「cbo」の方がいいと思います。
「cmb」だと、コマンドボタンを意味する「cmd」と見間違えやすいからです。
ま、趣味の問題だから、どっちでもいいんですけどね。
>If Not IsNull(txt発地都道府県) Then
Nullの場合だけを除外するのでいいのかなあ。
txt発地都道府県の値が長さ0の文字列である場合にどうなるか考えてみてください。
長さ0の文字列の場合にも対応しようというのであれば、Nz関数が使えると思います。
もっとも、手入力では長さ0の文字列をテキストボックスには入力できないので、
そこまで心配する必要はないかもしれません。
それから、「.Value」は省略しない方がいいと思います。
最近のエクセルVBAについての掲示板を見ていると、このような指摘をときどき見かけます。
省略すると、その分、コンピュータが補ってくれるわけですが、
コンピュータ内部で補うための処理が必要になるので、その分コードの実行が遅くなるらしいです。
>If Not IsNull(txt発地都道府県) Then
>strFilter = strFilter & " AND 発地都道府県 Like '*" & txt発地都道府県.Value & "*'"
>End If
エクセルVBAの本に書いてあったのですが、
オブジェクトの参照というのは、VBAコードの中では時間がかかる処理なのだそうです。
だから、オブジェクトの参照というのは、回数を減らした方がいいそうです。
これがアクセスの場合にあてはまるかどうかわからないのですが、
同じVBAなので、多分アクセスの場合にもあてはまるのだろうと思います。
上記コードでは、「If Not IsNull(txt発地都道府県)」でtxt発地都道府県を1回参照し、
「strFilter = strFilter & " AND 発地都道府県 Like '*" & txt発地都道府県.Value & "*'"」
でtxt発地都道府県をもう1回参照し、
結局計2回txt発地都道府県を参照することになります。
txt発地都道府県の値を変数に受けるか、又はWithステートメントを使えば、
テキストボックスを参照する回数を1回にできます。
ただし、使う変数を増やすと、その分のメモリー領域を要することになるため、
コードが遅くなると言われています。
ちなみに私は、無駄に多くの変数を使っています。
その方がコード内容を読み返したときに理解しやすいし、
デバッグのときにコードが返す値を確認しやすいからです。
>If Not IsNull(txt開始日) Then
例えば、txt開始日の値が「2015/13/32」だとしたら、どうなるか考えてみてください。
Nullじゃないから、このIf文は通ります。
そうすると、この値を使った条件式がstrFilterに代入されます。
でも、この値は日付ではないので、Filterプロパティへの代入ででエラーになります。
IsDate関数を使うと、日付として使える文字列かどうかチェックできます。
|
|