ACCESS VBA にて複数項目のあいまい検索をしようとしています。
txt部所、txt内容、txt備考はそれぞれ検索窓です。
実行すると、
「オブジェクト変数またはWithブロック変数が設定されていません」
というメッセージがでます。
また、動作としては部所の検索のみでき、
内容、備考検索は上記のエラーメッセージが出てできない状態です。
アドバイスよろしくお願いいたします。
以下がコードになります。
Private Sub cmd01_Click()
Me.FilterOn = False
If txt部所 <> "" Then
Me.Filter = "[部所氏名]like '*" & txt部所 & "*'"
ElseIf txt内容 <> "" Then
Me.Filter = "[内容]like '*" & txt内容 & "*'"
ElseIf txt備考 <> "" Then
Me.Filter = "[備考]like '*" & txt備考 & "*'"
ElseIf Nz(txt部所) & Nz(txt内容) & Nz(txt備考) = "" Then
MsgBox "検索条件を入力してください"
End If
Me.FilterOn = True
End Sub
No.10ベストアンサー
- 回答日時:
まずは、エラーとなるときに、
このエラー検知時のエラー箇所特定、対処例をまずマスターすることです。
それが分かればこの先のエラーもなんとかしのげます。
対処がわからず、闇雲にいろいろ試すのはあまりいい手段ではありません。
(何が原因かわからずやっていたらうまくいったというのは上達しないやり方です。。)
見ている限りではいろいろ試してはいるものの、
原因はともかく「エラー箇所行の特定」についてはなにも進んでいないように思います。
例えば、
ElseIf Me!txt備考 <> "" ThenやNz(Me!txt備考)で
エラーが起き、Me!txt備考が認識されていないという想定がついたなら、
Me!txt備考=""
でどうか、はやってみる価値あります。
>Me!txt備考 = Nothing
というのも、
内容をクリアの意味でやっているなら、Me!txt備考 = ""、
デフォルトが全件数させたいなら、Me!txt備考 = "*"
であり、
フォームを開くとき、次のフィルタを実行するときの両方のイベントに
行うのが良いです。
今の状況からは、
フォーム開いて、クリアしてから1回目のフィルタを行うと
2回目と同様、ここを通過するので同じようにエラーになるはず。
前述のように3パターンで確認お願いします。
1)1回目フィルタ→クリア→2回目フィルタ
2)クリア→1回目フィルタ
3)1回目フィルタ→フォーム閉じる→1回目フィルタ
1)はエラーとのことですが、2)もエラー、3)は問題なし、
と想定しています。
ありがとうございました!
Me!txt備考 = ""、
で試してみたところ、うまく抽出、クリアできました。
本当にありがとうございました!
No.9
- 回答日時:
エラーが検出されないのならば、
>Private Sub cmd02_Click()
>Me!txt部所 = Nothing
>Me!txt内容 = Nothing
>Me!txt備考 = Nothing
>Me.FilterOn = False
>End Sub
を
Private Sub cmd02_Click()
Me!txt部所 = ""
Me!txt内容 = ""
Me!txt備考 = ""
Me.FilterOn = False
End Sub
としたらどうなりますか?
No.8
- 回答日時:
再確認です。
ボタン押した瞬間のTXT部所ら3項目は、参照不可にならず、意図した内容ですか。参照設定は問題ないですか。
IF文のELSEIFをやめてそれぞれのIF文にしてさらに箇所絞り込みましたか。
NZの使い方は合っていますか。各項目それぞれが何も無い、3項目連結しても何も無い、としたいと思いますが今のは中途半端な式です。括弧かNZ(TXT部所)=“”&のようにした方がいいのではないですか。=が備考にのみ掛かっています。案外これかと。
MEとさせてますが、フォームはこれ以外にありますか。実際は裏でフォームが開いていたとか。
1回目→クリア→2回目
クリア→1回目、
1回目→閉じる→1回目
これまでの回答結果を整理して、
コンパイルや操作しても変わらず、以外の結果も教えて下さい。
同じ環境を再現出来るレベルでないのでこれくらいです。
No.7
- 回答日時:
チェックを入れたら、
Option Compare Database
Option Explicit
と記されていないのならば
Option Explicit
を追加して、保存し、コンパイルしてください。
Option Explicit
が記されていれば追加する必要は
ありません。これで今一度、
コード表のデバッグ→コンパイル
を選択し、実行してください。
これで変数扱いになっている
文字列がコンパイルエラーとして
表示されます。
まだ、どこかにエラーがあるはずです。
No.6
- 回答日時:
2解明とは2回目のことですね?。
きちんと稼動するものが2回目におかしいとなると、このクリック時のロジックでなく他の処理が影響しているのかと根拠は薄いですが想定されます。
フォーム開いてフィルタ実行、フォーム開いて実行は正しくなりますか。フォーム開いて実行、また実行がおかしい?。
オブジェクト変数~のエラーが実行時に出るからには1回目と2回目で項目名が変わるとかフィルタの命令文が認識できないように壊れてるとかデータ不正に依存したり、実行環境が変わってしまっている。
クリアして1回目フィルタはどうですか。
止まるのは
どの行でか特定してますか。
先に進めるには罠かけ。
メッセージボックスを追記して正しいところを明確にしましょう。
この回答への補足
フォームを開いて1回目だけどの検索窓でも正しく検索できます。
クリアボタンを押して2回目の検索をすると、
If Nz(txt部所) & Nz(txt内容) & Nz(txt備考) = "" Then
の部分でエラーになります。
ためにしに、この部分を削除して、検索条件だけにしてみましたが、
やはりif分の1行目でエラーになってしまいます。
No.5
- 回答日時:
エラー表示が無いのはどうにも
わからないのですが。
コード表の一番上には、
Option Compare Database
Option Explicit
と記されていますか。
コード表のツール→オプション→編集
の変数の宣言を強制するにチェックが
入っていますか。入っていなければ
入れてください。
そのあたりはどうですか。
この回答への補足
エラー表示が無いのはどうにも
わからないのですが。
コード表の一番上には、
Option Compare Database
Option Explicit
と記されていますか。
>ption Compare Database と記載されています
コード表のツール→オプション→編集
の変数の宣言を強制するにチェックが
入っていますか。入っていなければ
入れてください。
そのあたりはどうですか。
>チェックを入れたところ、エラーメッセージは出なくなりましたが、
まったくレコードを抽出しなくなりました。
No.4
- 回答日時:
追加です。
コード表でツールバーのデバッグからコンパイル
を選択して実行すればコンパイルエラーが表示され、
変数が定義されていません、と出ます。
'*" & txt部所 & "*'"
'*" & txt内容 & "*'"
など、その他で出るはずです。
この回答への補足
アドバイスありがとうございます。
コンパイルを実行してみましたが、
エラーメッセージは表示されませんでした。
そして1回実行すると、メニューがグレーアウトしてしまうのですが、
複数はコンパイルできないものなのでしょうか?
初歩的なことをお伺いしてすみません。
それから不思議に思うのは、検索は1回までなら正常に検索できるのですが、
1度条件をクリアーして2回目の検索を行うとエラーメッセージが表示されます。
クリアーボタンのコードは以下になります。
Private Sub cmd02_Click()
Me!txt部所 = Nothing
Me!txt内容 = Nothing
Me!txt備考 = Nothing
Me.FilterOn = False
End Sub
No.3
- 回答日時:
エラーの意味を書いておきます。
>オブジェクト変数またはWithブロック変数が設定されていません
でGoogle検索すればすぐでてきますが、要点は、
「無効な変数が参照されています」
ということです。つまりコードの中で変数宣言されていない
文字列が存在して、これは何?とAccessからエラー表示が
された、ということです。
この回答への補足
すみません、後ひとつ質問させてください。
コンパイルをし用紙とすると、デバッグーメニューに
「データベース名コンパイル」と出ると調べましたが、
私の場合、データベース名変更前の名前+コンパイルと出てきます。
そのことでうまくコンパイルできていないんでしょうか?
No.2
- 回答日時:
ステップ実行したか。
フィルタで指定する各テーブルの項目やフォームの項目、は正しいか、
と
判定を一旦はずし、フィルタを定義した行だけで実行してもダメか。
後、
3つとも無いケースは最初に判断する。
内容と備考に値あるとき内容だけのフィルタ設定になるが良いのか。
そんな感じです。
この回答への補足
アドバイスありがとうございます。
3つともないケースを最初に持ってきましたが、
やはり2解明にエラーが起こるという現象はかわりませんでした。
それから判定をはずしてみましたが、やはりかわりませんでした。
内容と備考に値があるとき内容のみの検索になるのはかまいません。
No.1
- 回答日時:
コードにMe!を追加するとどうなりますか。
If Me!txt部所 <> "" Then
Me.Filter = "[部所氏名]like '*" & Me!txt部所 & "*'"
ElseIf Me!txt内容 <> "" Then
Me.Filter = "[内容]like '*" & Me!txt内容 & "*'"
ElseIf Me!txt備考 <> "" Then
Me.Filter = "[備考]like '*" & Me!txt備考 & "*'"
ElseIf Nz(Me!txt部所) & Nz(Me!txt内容) & Nz(Me!txt備考) = "" Then
MsgBox "検索条件を入力してください"
End If
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
参照設定は2.8と6.0 6.1とどち...
-
次の問題(本文の下にあります...
-
複数のテキストファイルをエク...
-
【バッチファイル】ホスト名を...
-
Accessのレポートで重複データ...
-
ジェームス・ブラウンのマント...
-
Adobe Acrobat と Adobe Reader...
-
imac2012ってまだ使えますか?...
-
雪の女王、ボラの少女時代を演...
-
昔のテレビっておっぱいが出て...
-
パソコンのインカメラに不意に...
-
水に映った月明かりを表す言葉
-
VBAで○○:○○と表示させたいのに...
-
デスクチェア―のガスシリンダー...
-
韓国の歌詞サイトを教えてくだ...
-
latestの対義語
-
SED等で文字列を抽出したい
-
韓流好き妻の行動に怒り…私は狭...
-
プロジェクタに背景しか映らない
-
確率の問題です。 10人を4人、4...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【バッチファイル】ホスト名を...
-
昔のテレビっておっぱいが出て...
-
参照設定は2.8と6.0 6.1とどち...
-
複数のテキストファイルをエク...
-
水に映った月明かりを表す言葉
-
VBAで○○:○○と表示させたいのに...
-
デスクチェア―のガスシリンダー...
-
TextBoxコントロールを引数とし...
-
Adobe Acrobat と Adobe Reader...
-
韓流女と別れたい
-
次の問題(本文の下にあります...
-
バンタンのDOPEの最初って ラプ...
-
imac2012ってまだ使えますか?...
-
韓流好き妻の行動に怒り…私は狭...
-
latestの対義語
-
雪の女王、ボラの少女時代を演...
-
XJAPANバンド内いじめはほんと...
-
角度の求め方
-
Accessのレポートで重複データ...
-
確率の問題です。 10人を4人、4...
おすすめ情報