教えて!goo限定 1000名様に電子コミック1000円分が当たる!!

ACCESS VBA で複数項目検索にテキストボックスとコンボボックスを使用したい

txtPC番号というテキストボックス、
com所属部門というコンボボックス、
txt使用者というテキストボックスの
どれかひとつの条件が入力されたときに
該当するフォームのレコードを抽出できるようにしたいのですが、
コンボボックスで選択した場合のみうまく抽出できません。
コードのどの部分に誤りがあるのでしょうか?
ご指摘願えませんでしょうか?
よろしくお願いいたします。

Private Sub cmd01_Click()


Me.FilterOn = False

If Me!txtPC番号 <> "" Then
Me.Filter = "[PC番号]like '*" & Me!txtPC番号 & "*'"
ElseIf Me!com所属部門 <> "" Then
DoCmd.Requery "com所属部門"
ElseIf Me!txt使用者 <> "" Then
Me.Filter = "[使用者]like '*" & Me!txt使用者 & "*'"
End If

Me.FilterOn = True

End Sub

このQ&Aに関連する最新のQ&A

A 回答 (3件)

コンボボックスの使い方に間違いがあり、入力した値が各txtコントロール値になってない。

連結列プロパティー等どうなっているか見直しします。

コンボボックスのときだけおかしいならこのコードは変えないで下さい。たぶん正しくて変える必要ありません。

もう1つボタンを用意しこちらにはコンボボックスの仕掛けで処理させると何がどう違うかわかりませんか?。

後、このボタンクリック以外で各txtコントロールをクリアしたりしてませんか。似た仕掛けを見たことあります。

3つ共値が無い時のロジックも入れた方が良いです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
一つ一つ作業していったところ、
無事抽出できるようになりました。
また、3つとも値がないときのif分も追加いたしました。

本当にありがとうございました。

お礼日時:2010/07/02 11:44

所属部門で抜くときフィルタ設定しないで再クエリだけというのはどういう意図でしょうか。



条件変えて再クエリならまだわかります。
さらに、
ここがクエリなら3項目ともフィルタじゃなくてもクエリ側でなんか出来るようにも思います。
    • good
    • 0

うまく抽出できないというのはどう「うまく抽出」できないのでしょう。


期待値がわかりませんし、現状どうなっているのかもわかりません。

もし
「コンボボックスの際だけif文の中に入らない」(「DoCmd.Requery "com所属部門"」を実行しない)
ということであれば、ブレークポイントを敷いてのデバッグ時、com所属部門に値は入っていますか?

そもそも・・
コンボボックスの初期値はどうなっていますか?
またコントロールソースはベタ書きですか?
何かしかから引っ張ってきているのですか?

補足お願いします。

この回答への補足

アドバイスありがとうございます。

現状ではコードを書いて一番最初にコンボボックスで検索した部門が、
ほかの部門を選択して抽出ボタンを押しても出てきてしまうという
現象がおこってしまっています。

コンボボックスはプロパティ画面にて
値集合タイプ「テーブル・クエリー」
でテーブルの値を参照させています。

補足日時:2010/07/01 16:54
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESSのフォーム上で複数検索したい項目がある場合どうすればいいですか?

(1)部品ID
(2)日付
(3)入庫か出庫 
以上3つを検索したいのですがどうすればいいでしょうか?

(1)の部品IDはリストBOXの一覧から選択し、選択したものをテキストBOXに表示させるという形で作成しました。
(2)の日付はテキストBOXに手入力という形です。
(3)の入庫か出庫はコンボBOXで選択するという形です。

検索ボタンを作成してクエリの更新をかけて表示したいと思うのですが、3つの条件のうちその時により、全ての検索条件を入力しなくても1つでも条件を入力するとその条件が表示させるようにさせたいのです。

あと、何も条件を入力せず、検索ボタンを押すと全てのデータが表示させれるようにもしたいのです。

どのようなコードを記述すればいいでしょうか?
よろしくおねがいします

Aベストアンサー

>”このオブジェクトに値を代入することはできません”と表示され・・
失礼しました。フィルターのセットで最後が足りませんでした。あと[このオブジェクトに値を代入・・]のメッセージは抽出等で間違った指定方法をしているという事なのですが・・。
多分日付の抽出の仕方だと思いますので日付抽出のセットを少し変えましたのでメインフォーム上のボタンCmd1のクリック時のイベントを下記に変更してみてください。

Private Sub Cmd1_Click()
Dim MyCriteria As String

MyCriteria = "日付 ="
If IsNull(Text2) Then
MyCriteria = MyCriteria & True
ElseIf Not IsNull(Text2) Then
MyCriteria = MyCriteria & "#" & Me!Text2 & "#"
Else
End If

strfilter = MyCriteria
strfilter = strfilter & " And 部品ID Like '*" & Me.Text1.Value & "*' And 区分 Like '*" & Me.Cmb1.Value & "*'"

Forms!フォーム名!サブフォーム名.Form.Filter = strfilter
Forms!フォーム名!サブフォーム名.Form.FilterOn = True
Forms!フォーム名!サブフォーム名.Requery

End Sub

メインフォーム上のテキストボックスやコンボの値をサブフォームのフィルターに代入するときはMe!Text1の指定で良さそうなので上記でサブフォームにフィルターをかけられます。(試したらフィルターかけられました。)
これでどうでしょう。

>”このオブジェクトに値を代入することはできません”と表示され・・
失礼しました。フィルターのセットで最後が足りませんでした。あと[このオブジェクトに値を代入・・]のメッセージは抽出等で間違った指定方法をしているという事なのですが・・。
多分日付の抽出の仕方だと思いますので日付抽出のセットを少し変えましたのでメインフォーム上のボタンCmd1のクリック時のイベントを下記に変更してみてください。

Private Sub Cmd1_Click()
Dim MyCriteria As String

MyCriteria = "日付 ="
If IsNull(T...続きを読む

Qaccessvba 複数条件でFilterをしたい

テーブル1
---------------------------------------
IDフィールド1フィールド2
1あA
2いB
3うC
4えD
5おE
---------------------------------------
を作成し、そのテーブルをもとに、帳票フォームを作成しました。

そのフォームに非連結のテキストボックス
ID_テキスト
フィールド1_テキスト
フィールド2_テキスト
3つを設置しました。

行いたい事をクエリ(SQL文)で例えると、
---------------------------------------
SELECT テーブル1.ID, テーブル1.フィールド1, テーブル1.フィールド2
FROM テーブル1
WHERE (((テーブル1.ID) Like "*" & Forms!テーブル1!ID_テキスト & "*") And ((テーブル1.フィールド1) Like "*" & Forms!テーブル1!フィールド1_テキスト & "*") And ((テーブル1.フィールド2) Like "*" & Forms!テーブル1!フィールド2_テキスト & "*"));
---------------------------------------
なのですが、
これをクエリを作成せずに、VBAで行いたいです。

各非連結のテキストボックスには、
更新後処理:[イベント プロシージャ]
としています。
---------------------------------------
Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub
---------------------------------------
は、問題なくできるのですが、

Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" and & _
"フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub

にすると、エラーになります。
andの繋げ方が良くないと思うのですが、どうすればいいでしょうか?

最終的には、

Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'"
"フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'"
"フィールド2 like '" & "*" & Me.フィールド2_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub

のような感じにしたいです。
ご回答よろしくお願いします。

テーブル1
---------------------------------------
IDフィールド1フィールド2
1あA
2いB
3うC
4えD
5おE
---------------------------------------
を作成し、そのテーブルをもとに、帳票フォームを作成しました。

そのフォームに非連結のテキストボックス
ID_テキスト
フィールド1_テキスト
フィールド2_テキスト
3つを設置しました。

行いたい事をクエリ(SQL文)で例えると、
---------------------------------------
SELECT テーブル1.ID, テーブル1.フィールド1, テーブル1.フィールド2
FROM テーブ...続きを読む

Aベストアンサー

Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "' and " _
& "フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub
でしょ。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qアクセスでのテキストボックスの複数条件での抽出

Private Sub 検索_Click()

Dim strFilter1 As String
Dim strFilter2 As String
Dim strFilter3 As String

strFilter1 = "学校名 = '" & 学校名1 & "'"
strFilter2 = "学校区分 = '" & 学校区分1 & "'"
strFilter3 = "キャンパス = '" & キャンパス1 & "'"
Me.Filter = strFilter1 & " or " & strFilter2 & " or " & strFilter3


Me.FilterOn = True

End Sub


(1)学校名・(2)学校区分・(3)キャンパスと3つのテキストボックスがあり
3つの抽出条件を満たすレコードをフォームに表示させたいのですが
学校名を仮に早稲田大学といれ絞れるのですが次に学校区分を大学
と入れるとほか大学も抽出されてしまいます。

学校名を抽出させたら、その範囲で学校区分の大学を抽出させたいのですが
どのようにすればいいのでしょうか?
(1)のみの抽出の場合や(1)と(2)のみの
場合があるのでandの完全一致ではありません。

Private Sub 検索_Click()

Dim strFilter1 As String
Dim strFilter2 As String
Dim strFilter3 As String

strFilter1 = "学校名 = '" & 学校名1 & "'"
strFilter2 = "学校区分 = '" & 学校区分1 & "'"
strFilter3 = "キャンパス = '" & キャンパス1 & "'"
Me.Filter = strFilter1 & " or " & strFilter2 & " or " & strFilter3


Me.FilterOn = True

End Sub


(1)学校名・(2)学校区分・(3)キャンパスと3つのテキストボックスがあり
3つの抽出条件を満たすレコ...続きを読む

Aベストアンサー

わかった。

フォームモジュールの先頭
Option Compare Database
の次の行に
Option Explicit

これで分かるでしょう。

QAccess テキストボックスとlikeのあいまい検索

タイトルどおりの操作について教えてください。
Access VBAは、ごく簡単な操作が理解できる程度のレベルです。

フォームに検索キーワード用の非連結のテキストボックスを作成し、
コマンドボタンで検索を実行したいと思います。

イコールで結んだ場合は検索されるのですが、これをLikeに変えると
まったく検索されません。

[Q_書籍名検索]![書名] = [Forms]![F_書籍名で検索]![書籍検索]

[Q_書籍名検索]![書名] Like " * " & [Forms]![F_書籍名で検索]![書籍検索] & "*"

エラーも表示されないのですが、なにが問題なのか教えてください。
よろしくお願いします。

Aベストアンサー

まず、『F_書籍名で検索』のクエリにて『抽出条件』に以下を入力。

Like "*" & [Forms]![F_書籍名で検索]![書籍検索] & "*"

次にマクロを新規作成します。
アクションに『フィルタの実行』を選択。
フィルタ名に上記のクエリ名を入力。

そして、『F_書籍名で検索』に戻り『書籍検索』のプロパティにて
『更新後処理』に新規作成したマクロを指定します。

これだと『書籍検索』に言葉を入力して『ENTER』を押すと抽出されます。

私的にはコマンドボタンはいらないと思います。

QACCESS VBA にて複数項目のあいまい検索をしようとしています。

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

ACCESS VBA にて複数項目のあいまい検索をしようとしています。
txt部所、txt内容、txt備考はそれぞれ検索窓です。

実行すると、
「オブジェクト変数またはWithブロック変数が設定されていません」
というメッセージがでます。

また、動作としては部所の検索のみでき、
内容、備考検索は上記のエラーメッセージが出てできない状態です。

アドバイスよろしくお願いいたします。

以下がコードになります。


Private Sub cmd01_Click()


Me.FilterOn = False

If txt部所 <> "" Then
Me.Filter...続きを読む

Aベストアンサー

まずは、エラーとなるときに、
このエラー検知時のエラー箇所特定、対処例をまずマスターすることです。
それが分かればこの先のエラーもなんとかしのげます。
対処がわからず、闇雲にいろいろ試すのはあまりいい手段ではありません。
(何が原因かわからずやっていたらうまくいったというのは上達しないやり方です。。)

見ている限りではいろいろ試してはいるものの、
原因はともかく「エラー箇所行の特定」についてはなにも進んでいないように思います。


例えば、
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)は問題なし、
と想定しています。

まずは、エラーとなるときに、
このエラー検知時のエラー箇所特定、対処例をまずマスターすることです。
それが分かればこの先のエラーもなんとかしのげます。
対処がわからず、闇雲にいろいろ試すのはあまりいい手段ではありません。
(何が原因かわからずやっていたらうまくいったというのは上達しないやり方です。。)

見ている限りではいろいろ試してはいるものの、
原因はともかく「エラー箇所行の特定」についてはなにも進んでいないように思います。


例えば、
ElseIf Me!txt備考 <> "" ThenやNz(Me!txt...続きを読む

QACCESS検索★ある文字を複数のフィールドの中から検索したい

ACCESS検索の質問です。
ある文字を複数のフィールドの中から検索したいのですが、十数個あるフィールドに一々検索文字を入力していくと大変な作業になってしまいます。何かSQL文でも構いませんので作業の手間が省ける方法はないでしょうか。よろしくお願いします。

Aベストアンサー

 検索と置換ダイアログボックスで、「探す場所」を「テーブル」にしてはいかがでしょう。

QACCESSで複数条件でデータ抽出するフォームの作成

ACCESS2000で複数の条件を入力し、該当するデータを抽出するフォームを作成しています。どんな方法がありますか?簡単に出来る方法をお教えください。
具体的には、売上明細データを検索します。あらかじめ
テーブル:売上明細データ をいろいろなマスタを参照している
クエリ:売上明細クエリ を元に抽出します
条件は売上日付の日付1と日付2の項目と、伝票区分の項目です。
フォームの頭にテキストボックスを3つ作成し、日付1~日付2までの売上日付で
入力された伝票区分のもののみを表示させたいのです。
検索というコンボボタンを配置し、クリック時にその下にクエリからの必要な表示項目を売上明細クエリから配置しています。
抽出する方法(条件の与え方)を教えてください。よろしくお願いいたします。

Aベストアンサー

クエリの日付抽出条件欄に

Between Nz(Forms!フォーム名!日付1,#1900/1/1#) and Nz(Forms!フォーム名!日付2,#2900/12/31#)

伝票区分の抽出条件欄に

=Forms!フォーム名!伝票区分 or Forms!フォーム名!伝票区分 is null

ボタンでフォームを再クエリします

Qaccess マクロでのフィルタの解除の方法

フィルタをかける時は、

***************************
アクション:フィルタの実行
フィルタ名:なし
Where条件式:[フィールド1]="あ"
***************************

で、できますが、
フィルタを解除する時はどのようなマクロを作ればいいのでしょうか?

VBAでやるなら、
Me.Form.FilterOn = False
をマクロでやりたいです。

アドバイスよろしくお願いします。

Aベストアンサー

> VBAでやるなら、
> Me.Form.FilterOn = False
> をマクロでやりたいです。

ご質問の趣旨が「並べ替えは維持した状態で、フィルタだけ解除したい」という
ことでしたら、以下の方法で対応できます。


a)フィルタの解除専用の場合
***************************
アクション:コマンドの実行
コマンド:フィルタをすべて解除
***************************
※フィルタが適用されていない状態で実行するとエラーになります。
  (コマンドボタンで実行させる場合、フィルタ未適用時はボタンを使用不可
  にするか、マクロの『条件』欄に「~.FilterOn = True」の記述が必要、と)
  また、フォームのプロパティシートの『データ』タブにある『フィルタ』欄(VBAでの
  Me.Form.Filterに相当)に設定された文字列も削除されます。


b)フィルタの適用/解除を交互に切り替える場合
***************************
アクション:コマンドの実行
コマンド:フィルタの実行/解除
***************************
※当該フォームにフィルタが設定されていない場合、エラーとなります。
 (フォームのプロパティシートの『データ』タブにある『フィルタ』欄に
  フィルタとなる文字列が設定されていればOk:)
 (フィルタが適用済みなら解除、解除済みなら適用、となります)


因みに、マクロのデザインビューで、『デザイン』リボンの『表示/非表示』グループ
内にある『すべてのアクションを表示』をオンにしてもよいのでしたら、以下の
方法もあります。
(VBAでの方法をご存知の上でマクロで対応ということは、勤務先のセキュリティ
 方針によるものかと思いますので、この方法も不可かもしれませんが(汗))

***************************
アクション:値の代入
アイテム:Forms!フォーム名.Form.FilterOn
式:False
***************************

※サブフォームの場合の『アイテム』は以下のようになります:
 Forms!フォーム名!サブフォームコントロール名.Form.FilterOn

> VBAでやるなら、
> Me.Form.FilterOn = False
> をマクロでやりたいです。

ご質問の趣旨が「並べ替えは維持した状態で、フィルタだけ解除したい」という
ことでしたら、以下の方法で対応できます。


a)フィルタの解除専用の場合
***************************
アクション:コマンドの実行
コマンド:フィルタをすべて解除
***************************
※フィルタが適用されていない状態で実行するとエラーになります。
  (コマンドボタンで実行させる場合、フィルタ未適用時はボタンを使用不可
  にするか、...続きを読む

QACCESSのフォームからデータの追加ができない

現在Accessの基本を勉強中です。
テーブルを元にフォームを作成し、フォームから新しく名前や会社名などを直接入力し、追加できるようにしたいです。
ところがフォームから入力を行うと、内容が追加されず一番最初に登録した人の名前が書き換わるだけになります。
どのように新しくデータを追加できるようになるのでしょうか?
まったくの初心者なので、どの機能を使えばよいか戸惑ってます。
どうかよいご意見をお願い致しますm(__)m

Aベストアンサー

データを追加する場合は、新規レコードに移動(=新規レコードを選択)する必要があります。

最も簡単なのは・・・
そのフォームの最下方に、レコードセレクタ(『レコード: [|<][<][   1][>][>|][*]/1』といった
感じの部分)が表示されていたら、そこで『[*]』のボタンを押すと、新規レコードに移動できます。
(もしレコードセレクタが表示されていないようなら、フォームのプロパティシートを開いて、
 『書式』タブの『レコードセレクタ』の設定値を「はい」にして下さい)

他には、
 ・フォーム自体を入力専用にする
 (フォームのプロパティシートの『データ』タブで『データ入力用』を「はい」に設定:
  既存のレコードは表示されなくなります)
 ・レコード移動用のコマンドボタンを設置する
 (フォームをデザインビューで開き、ツールボックス(矢印や、新規のテキストボックス等を
  設置する際に使用するツールバー)の左から二番目にあるウィザードボタンが押された
  状態にして、新規コマンドボタンを設置すると、簡単に作れると思います)
といった方法があります。

データを追加する場合は、新規レコードに移動(=新規レコードを選択)する必要があります。

最も簡単なのは・・・
そのフォームの最下方に、レコードセレクタ(『レコード: [|<][<][   1][>][>|][*]/1』といった
感じの部分)が表示されていたら、そこで『[*]』のボタンを押すと、新規レコードに移動できます。
(もしレコードセレクタが表示されていないようなら、フォームのプロパティシートを開いて、
 『書式』タブの『レコードセレクタ』の設定値を「はい」にして下さい)

他には、
 ・フォー...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング