If Not IsNull(Me.間口_min) Then
strFilter = strFilter & " AND 間口 >= " & Nz(Me.間口_min)
End If
If Not IsNull(Me.間口_max) Then
strFilter = strFilter & " AND 間口 <= " & Nz(Me.間口_max)
End If
DoCmd.Requery "保管地番"
Me!保管地番.SetFocus
If Me.町名コンボ= "大江" Then
MsgBox "大江1丁目・2丁目1番~7番・大江3丁目~6丁目は中央署です。
大江2丁目8番以上は東署です。"
管轄署 = InputBox("管轄署を入力")
管轄署.SetFocus
End If
Me!保管地番.SetFocus
Me!警察署 = 町名コンボColumn(3)
End Sub
Me.Filter = Mid(strfilter, 6)
If strfilter = "" Then
Me.FilterOn = False
Else
Me.FilterOn = True
If Me.Recordset.RecordCount = 0 Then MsgBox "検索データはありません"
End If
朱色さん、ありがとうございます。
私のAccess19でも「フォーム上のコントロールにWindowsのテーマを使用する」のチェックをはずして、コントロールの「テーマの使用:いいえ」で旧スタイルになりました。
当方Access2016
ボタンのプロパティで「境界線幅:3ポイント」→「テーマの使用:いいえ」にしたら四角く立体的なボタンになりました。
あら、うまくいきましたか。それはよかったです。
でも、なぜ、私のAccessでは変化なしなんだろう?謎です。
hatenaさま
上手くいきました!
ACCESSのバージョンは職場で2013、自宅で2019で、どちらでも同じ結果を得られました。
大変ありがとうございましたm(__)m
Accessのバージョンは何でしょうか。
記憶では、ファイル→オプション→現在のデータベースの「フォーム上のコントロールにWindowsのテーマを使用する」のチェックを外すと古いデザインに戻ったと思うのですか、今、確認してみたら、チェックを外しても変化ないですね(Access2019)。
いえ、サブフォームに埋め込まれているフォームの方で設定してください。
メインフォームで設定するのですね。
どうもありがとうございました。
フォームの「削除の許可」プロパティを「いいえ」に設定してください。
ありがとうございます!
うまくいきました!
どうやら「#」だと日付だと認識するらしい、とまでは気付いたものの、テキスト型で正しい、と思い込んでいたので「*」に変えてみたり、いろいろ見当違いなことをやってしまっていました。
教えてくださったように記述して、抽出結果が出た時には感動しました。
リンクしていただいたhatenaさんのサイト、お気に入りに追加しました。
勉強させていただきます。
職場で図面の登録・検索システムを作らねばならず、五十の手習いでネットや本でで調べたりコピペしたり四苦八苦していましたが、おかげさまで今回一気に進みました。
いつか私も他人様に教えられるくらいになりたいです。
hirotonさんの回答に私も同意です。
メッセージボックスを表示させるのは入力が中断されるのでユーザーにとっては鬱陶しいです。
コンボボックスで選択できるようにして、その横にラベルを配置しておいて、そのラベルに
"大江1丁目・2丁目1番~7番・大江3丁目~6丁目は中央署です。
大江2丁目8番以上は東署です。"
と表示させればいいかと思います。
ところで、丁目以降は入力しないのでしょうか。
丁目で警察署を判断するということは、入力時に参照してるデータには丁目があるということですよね。
ならば丁目まで入力あるいはコンボで選択するような設計にすれば警察署は自動できまります。
大江だけ例外的な処理なら今回のような設計もありえますが。
まず、間口フィールドのデータ型は数値型にしてください。
短いテキストでは大小比較ができません。
Filterに設定する条件式はSQL文になりますが、
SQLでは、
日付/時刻型は # で囲む、
テキストは ' で囲む、
という決まりがあります。
数値は囲まずにそのまま使用します。
ということで、下記のように修正するといいでしょう。
余裕があるなら、下記のページを参照して学習しておくと理解が深まると思います。
最初から管轄署をコンボボックスで作ればいいのでは?
(やっぱりユーザーに入力させないのが一番だと思いますが)
訂正です
ME.保管地番→ME.町名コンボ
お世話になります。質問が要領が悪く大変失礼しました。
下記で分かりますでしょうか。
区コンボ あいおうえおコンボ 町名コンボ
それぞれコンボを連携し町名まではコンボ入力し
丁目以降は手入力をしています。
中央区 → あ → 大江
東区 か 出水
西区
南区
北区
大江以外の町名にはそれぞれ警察署をコンボに記して
Me!警察署 = 町名コンボ.Column(3)で求めています。
しかし大江は下記のように丁目地番で警察署が違うので
町名コンボの更新後処理で処理したいのです。
町名コンボの更新後処理に
DoCmd.Requery "保管地番"
Me!保管地番.SetFocus
If Me.町名コンボ= "大江" Then
MsgBox "大江1丁目・2丁目1番~7番・大江3丁目~6丁目は中央署です。
大江2丁目8番以上は東署です。"
管轄署 = InputBox("管轄署を入力")
管轄署.SetFocus
End If
Me!保管地番.SetFocus
Me!警察署 = 町名コンボColumn(3)
End Sub
それではよろしくお願いします
早々にご返事いただきまして
ありがとうございます。
少しづつ思うような検索フォームに近づいていて
益々勉強しなければ!と思うこの頃です。
本当にありがとうございます。
ご指摘ありがとうございました。いつも参考になる回答をありがとうございます。
そのような疑問が出るということは、どこからのコードをそのままコピペして使用しいるのだと思いますが、
それぞれのコードの意味をまずは理解してください。
そのコードのやっていることはフォームのレコードソースのデータを対象に検索するというコードです。
フォームにレコードがなければ検索できるはずかありません。
また、その前に、何をしたいのか分析しましょう。その目的に合致した方法を選ぶ必要があります。
「検索」とは複数のレコードが表示されていて、条件に合致するレコードへ移動するということです。
フォームに最初はレコードは表示してなくて、条件に合致するレコードを表示するのは「抽出」です。
やりたいことは、あるいは目的に合致するのは「検索」か「抽出」のどちらですか。それをまず検討してください。
このコードは、テーブルを指定しないと動かないのでしょうか?
MT_名簿を検索しています
フォームにレコードは表示されていません。
If Rst.EOF Then
MsgBox "レコードがありません。"
Exit Sub
Else
Rst.MoveFirst
End If
上記を記載しても同じエラーになります。
いつも大変お世話になっております。
漢字フリガナ検索も無事思うように動作するようになり、大変助かっております。
追加の質問をさせて頂きたく、送信いたしました。
検索結果データがない場合、
メッセージボックスで「検索データはありません」等の表示をさせる方法はないでしょうか?
どうぞよろしくお願いいたします。
フォームにレコードは表示されてますか。レコード件数が0だとそのエラーになりますが。
下記のようにしてみては。
どこまでできていて、どこで躓いているのか提示してください。
あと、下記の情報も提示してください。
テーブル名、フィールド名、データ例
現状の仕様をもう少し詳細かつ明確に提示してもらった方が適切な回答ができると思います。
出ている情報から推測するに、
コンボボックス「CB熊本市保3」で町名を選択する、ということですね。
フォームのレコードソースのテーブルのフィールド構成はどうなっているのでしょうか。
住所は熊本市だけですか。
町名、丁目番地は別になっているのでしょうか。
大江町以外の場合はどうなりますか。
InputBox
で表示されるテキストボックスのところにコンボボックスを使いたいということですかね?1.標準機能にはないので、専用のフォームを作成して(ポップアップに設定しておいて)、
Inputbox
の代わりにOpenform
して閉じるときのイベントで[管轄署]に入力するのが一般的だと思います。2.身内で使うようなものなら
で手抜き実装したりとか
3.大江町以外の[管轄署]がどう使われているのかわかりませんが[大江町用管轄署]コンボボックスを重ねて
visible
のON/OFFでそのフォーム内で処理するとか4.
決まり切っているなら自前で入力された住所を解析してユーザーに入力させないのが一番だと思います。住所だと丁目(番地)を省略されたりハイフンでつないだりと手間もかかりそうですが。
ですよね。といいますか、突然できるようになりました。
hatena様効果でしょうか?
お騒がせしました。ありがとうございました。
フォームのプロパティの「既定のビュー」は「データシート」、「データシートビューの許可」は「はい」になっていますか。
あるいは、フォームのプロパティ設定を無視して、強制的にデータシートビューで開きたい場合は、下記のように記述します。
そんなことはないと思います。
ありがとうございました。おかげさまで、解決しました!
最適化についても全く知らず、元ファイルが35MBもあったのに、最適化で1.4MBになりました。
いつも助けていただいてありがとうございます。また困った時には相談させてくださいm(_ _)m
ファイルみてました。
症状確認できました。
いろいろ、試してみて対処法を発見しました。
四角形コントロールでラベルやテキストボックスを囲んでいますが、その四角形コントロールを選択して、右クリックして[位置]-[最背面へ移動]をクリックしてください。
これで、症状が発生しなくなります。
四角形コントロールが前面にあると、背景スタイルが透明にしてあっても、背面のコントロールの描画になんらかの影響を与えるのだと思われます。
できました!お手数をおかけしますが、よろしくお願いしますm(_ _)m
ファイルのコピーを作成して、そこから、症状のでるフォームとテーブルのみ残して、
テーブルのデータは症状の確認できる最低限の件数のみ残して(10件もあればいいと思います)、最適化修復をして、それをZIPファイルにしたら小さくなりませんか。
ありがとうございます。すみません、どうしても1076KBより小さくなりません。
何かZIPファイルをお送りする方法はありませんでしょうか。
マクロかイベントプロシージャを設定してなくて、ラベルの書式が勝手に変わるという状況が想像つきません。
右のカラムの下の方の「ファイル送信フォーム」から症状の出るファイルを送信してもらえますか。
ファイル内はフォームとレコードソースのテーブルのみの最低限のものにして、ZIPファイルにして送信してください。
ありがとうございます。連結フォームです。
フォームのイベントを確認しましたが、
「タイマ間隔」が「0」、「キーボードイベント取得」が「いいえ」
それ以外は何も設定されていません。
段々濃くなるラベルを1つ消して、新たにラベルを設置してみたのですが、状況は変わりませんでした。
連結フォーム上のラベルですか。
画像で見ると単に太字になっているようですが、だんだん色が濃くなっていくのですか。
フォームのイベントにマクロかイベントプロシージャを設定していますか。
しているなら一度それをすべて削除して試してみてください。(バックアップを取ってから)
それでも再現しますか。
リンク親フィールド、リンク子フィールドで関連付けしてあるということでしょうか。
ならば、
[納入先ID] = Forms![O111受注台帳閲覧]![納入先ID]
でいいと思います。試してみてください。
[C101納入先マスターメイン] を [O111受注台帳閲覧]の[納入先ID]で抽出することになりますが、
メインフォームを抽出すれば、サブフォームもそれに関連するデータに抽出されます。
ありがとうございます。
Forms![C101納入先マスターメイン] と Forms![C101納入先マスターメイン]![C101納入先マスターサブ].Form!
が [得意先ID] で関連付けしてあります。
「フォームを開く」アクションの「Where条件式」の設定ですね。
別のフォームのコントロール値を使ってレコードを制限する場合は下記の構文になります。
[フィールド名] = Forms![フォーム名]![別のフォームのコントロール名]
開きたいフォームはメイン/サブフォーム形式のようですが、メインフォームとサブフォームの関係はどのようになってますか。
メインフォームとサブフォームが「納入先ID」フィールドでリンクされているなら、
[納入先ID] = Forms![O111受注台帳閲覧]![納入先ID]
と設定すればOKです。
そうでないなら、メインフォームとサブフォームの関係がどうなっているか説明してください。
DoCmd.GoToRecord , , acNewRec
でエラーが出るとすると、フォームの「追加の許可」プロパティが「いいえ」になっているとか、
レコードソースのクエリが更新不可になっているか、ではないですか。
新規レコードがないので当然エラーになります。
早速のご回答ありがとうございます!!
おかげさまでできました。
Me!でしたら、コンボボックスの件も Me!車名.Column(1) でクリアできました。
初心者にもわかりやすい解説付きでご教授いただき本当にありがとうございました!