
お世話になります。
Access2003で在庫管理システムを作っています。
商品マスター登録画面にて商品を検索する際
コマンドボタンで検索画面に移動
テキストボックスに入力した文字列を含む商品を
検索画面内のサブフォームに表示、該当レコードをダブルクリックすると
商品マスター登録画面にその商品が表示される…という
ところまでなんとかかんとか作りました。
でもレコードソースを書き換えるところがまずいみたいで
商品マスター登録画面には表示したレコード1件のみしか
表示されなくなってしまいます。
私がやりたいのは単なるレコードの移動です…
調べましたがどうしたらいいのかわかりません。
よろしくお願いします。
検索画面内のサブフォームをダブルクリックしたときのコード
Private Sub Form_DblClick(Cancel As Integer)
On Error GoTo Err_Form_DblClick
Dim strSQL As String
With Application.Forms("商品マスター登録")
strSQL = "SELECT *"
strSQL = strSQL & " FROM 商品マスター"
strSQL = strSQL & " WHERE 商品ID = " & Me.商品ID
Form_商品マスター登録.RecordSource = strSQL
↑ここをどう変えればいいでしょうか?
End With
Exit_Form_DblClick:
Exit Sub
Err_Form_DblClick:
MsgBox Err.Description
Resume Exit_Form_DblClick
End Sub
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>いまいち話が噛み合わないのはそれが原因かも…
分かりにくい表現でしたが、ほぼ正しく受け取っていましたよ
答えは最初のものに戻ります
>strSQL = "SELECT *"
> strSQL = strSQL & " FROM 商品マスター"
> strSQL = strSQL & " WHERE 商品ID = " & Me.商品ID
ここで商品IDが指定されたものだけに絞込み
> Form_商品マスター登録.RecordSource = strSQL
それをフォームのソースにしてしまえば
>フォームシートビューなので見た目は1件ごとの表示です
見た目だけでなくそのフォームには1件しかありません
移動したいといっている他のレコードは無くなっています
絞込みではなくレコードの移動をしてください
この回答への補足
>答えは最初のものに戻ります
というのは、#1のフィルタを使うということでしょうか?
#4のお礼に書きましたように、フィルタを使うと見た目上
1件しか表示されなかったので自分の思っていた動きではなかったです
1/1(フィルタ)という具合です
最初の質問で書いたレコードソースを1件だけに書換えてしまった
のと見た目上は変わりませんでしたし
フィルタを解除しても先頭レコードが表示されるだけでした
私がやりたかったことは3/100といった具合に
全体のレコード数は残した上で、指定レコードに移動したかったので
それはレコードセットで実現できました
No.4
- 回答日時:
用語は統一しましょうね
いきなり別画面といわれても何のことかわかりませんよ
別画面というのは
>そのレコードをダブルクリックすると
>商品マスター登録画面に商品ID:2のレコードの内容が表示される
これのことですか?だったら商品IDが2のものしかないのでは
別画面が
>検索画面内のサブフォームに表示された
これなら、
もう一度ダブルクリックしてやらないと登録画面は書き換わりませんね
この回答への補足
別画面と言っているのは
商品マスター登録画面のことです
混乱するような言い方してすみません
今回使用しているフォームは3つ
1.商品マスター登録画面
2.検索画面
3.検索画面内のサブフォーム
最初の質問で書いたコードは
3.検索画面内のサブフォームのDblClickに記述してあることです
サブフォームには全ての商品、もしくは一部の商品が
抽出されて表示されてますので
その中から指定した商品と同じ商品IDを持つレコードに
1.商品マスター登録画面でも移動したいということです
1には商品マスター全てがレコードソースになっていますが
フォームシートビューなので見た目は1件ごとの表示です
3で選択(ダブルクリック)した商品IDのレコードに移動したいのです
2.3の画面はダブルクリックされたら
検索終了とみなして閉じます
という仕様です
サブフォームというのは登録画面にあるのではなく検索画面にあるので
そこをちゃんと伝えきれてなかったかもしれないですね
いまいち話が噛み合わないのはそれが原因かも…
解決しました!
レコードセットで指定したレコードに移動することができました
With Form_商品マスター登録.Recordset
.FindFirst "商品ID = " & Me!商品ID
If .NoMatch Then MsgBox "該当するレコードはありません"
End With
フィルタを使って試してみましたが、やはり1件だけしか表示されず
解除すると先頭レコードになってしまうので
やりたいことと違ってました
要領を得ない質問をして申し訳ありません
自己解決となりましたが、いろいろご指摘いただいて
勉強になりました
ありがとうございました
No.3
- 回答日時:
>メインの商品マスター登録画面の方でもいったんフィルターをかけて
>解除すれば該当のレコードが表示されるという意味で
>おっしゃっているのでしょうか?
抽出:そのレコードだけを取り出す
フィルタ:そのレコードだけを表示する(元のソースはそのまま)
検索:そのレコードのところにジャンプする
>私がやりたいのは単なるレコードの移動です…
だったら検索ですね
だけど
>検索画面内のサブフォームに表示、該当レコードをダブルクリックすると
>商品マスター登録画面にその商品が表示される…
この中でレコードの移動(他の商品に移動)を行いたいだったら、仕様の段階で矛盾してますね
もう一度ダブルクリックのところにもどらないと他の商品は表示できないのでは
この回答への補足
理解力がなくてすみません
>もう一度ダブルクリックのところにもどらないと他の商品は表示できないのでは
のところがよくわかりません
具体例でいうと、商品マスターに100件商品があったとして
商品マスター登録画面から
検索画面に飛んでテキストボックス・ないしコンボボックスから
選択した抽出条件に合うレコードが3件抽出されたとします
(データシートビューで表示されています)
検索画面内のサブフォームに表示された3件のうちの1件が
商品ID:2だったとしたら
そのレコードをダブルクリックすると
商品マスター登録画面に商品ID:2のレコードの内容が表示される
(こちらはフォームシートビューなので1件ごとの表示です)
という仕様です
別画面の表示を指定したレコードに移動させるということなんですが
これは矛盾することなんでしょうか?
ちなみに商品マスター登録画面は最初に開いた段階では
新規レコードになっています
オペレータが任意で前後のレコードに移動していたら
違うレコードが表示されているかもしれません
フォームシートビューなので
表示したい商品があった時に何度もクリックして
レコードをさかのぼることになるので
検索画面の方で選択したレコードに
一発で移動ということをやりたいわけです
実際の画面をお見せできれば一番いいと思うのですが
言葉だけで伝えるのは難しいです…
>検索:そのレコードのところにジャンプする
というのは#2さんがおっしゃっているような
FindRecordを使ったりということでしょうか?
(今のところうまくいっていませんが^^;)
また意図と違うことを言っていたらすみません
コメント下さってありがとうございます
No.2
- 回答日時:
回答ありがとうございます
リンク先を参考にして
検索画面内サブ画面ダブルクリックのところに
商品マスター登録画面の商品IDにSetForcusし
FindRecordする記述を書いてみました
以下の記述です
Dim strData As String
strData = Me!商品ID
Form_商品マスター登録!商品ID.SetFocus
DoCmd.FindRecord strData
しかしFindRecordのところでエラー
「コマンドまたはアクション'レコードの検索'は無効です。」
と言われてしまいました
商品マスター登録画面の商品IDはオートナンバーになっています
それも関係ありますか?それとも画面の設定でしょうか?
あるいは全然別の問題なのか…
No.1
- 回答日時:
抽出を行っているのですから
>商品マスター登録画面には表示したレコード1件のみしか
>表示されなくなってしまいます。
こうなるのは当然ですね
フォームのソースは指定した商品IDのもののみになります
>私がやりたいのは単なるレコードの移動です…
これをしたければ検索をしましょう
フィルタなら解除すれば元に戻ります
抽出、フィルタ、検索の違いを勉強された方がいいみたいですね
この回答への補足
回答ありがとうございます
言葉が足りなかったかもしれないですが、
検索画面でデータを抽出するところまではうまくいっています。
(フィルタは使わず、if文の入れ子で作ってますが…^^;
今後検索条件が増えたときのためにフィルタも勉強しようと思います)
抽出した中から指定(ダブルクリック)した商品IDを持つ
レコードを別画面(商品マスター登録画面)で
同じ商品IDのレコードの内容を表示したい、ということなんですが
ブックマークかな??と思って試してみましたがエラー…
使い方が良く分かってないです
的外れなことを言っていたらすみません
メインの商品マスター登録画面の方でもいったんフィルターをかけて
解除すれば該当のレコードが表示されるという意味で
おっしゃっているのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- その他(買い物・ショッピング) JANコードの登録について 1 2022/07/23 14:19
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- その他(プログラミング・Web制作) パイソンでのプログラミングについて 3 2022/08/11 20:31
- Visual Basic(VBA) VBA 税率を判定表する方法を教えて下さい。 10 2022/03/28 11:21
- Visual Basic(VBA) EXCEL関数LOOKUPとFILTERについての質問です 1 2022/12/21 05:53
このQ&Aを見た人はこんなQ&Aも見ています
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
Access コンボボックスの値をクリアしたい。
PowerPoint(パワーポイント)
-
-
4
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
5
Accessの更新前処理について。DoCmd.GoToRecordが動かないのはなぜ?
その他(プログラミング・Web制作)
-
6
Accessでレコードが更新された時に発生するイベント。
その他(データベース)
-
7
Access レコード移動時イベントでサブフォーム
Access(アクセス)
-
8
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
9
新規レコード行を非表示にしたい
Access(アクセス)
-
10
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
11
ACCESSでオフセットを求める方法
その他(データベース)
-
12
Accessフォームで詳細内の任意の行へSetFocus
Excel(エクセル)
-
13
アクセス・別フォームの新規レコードへの移動
Access(アクセス)
-
14
access マクロでのフィルタの解除の方法
Access(アクセス)
-
15
Accessレポートのチェックボックスを大きくする方法
Access(アクセス)
-
16
Access「レコードの移動」マクロについて
Excel(エクセル)
-
17
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
18
ACCESS──メインフォームでサブフォームのレコード件数をカウントしたい
Access(アクセス)
-
19
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
20
ACCESS 複数のフォームから同一テーブル参照
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AccessのRefresh・Requery・Rep...
-
ACCESS 複数のフォームから同一...
-
Accessフォームで詳細内の任意...
-
Accessでレコードの複製
-
Accessで経過日付に応じて色を...
-
Access 指定したレコードへ移動
-
アクセスのコンボボックスの内...
-
DoCmd.SearchForRecord が動か...
-
アクセスのフォームビューの帳...
-
ACCESSフォーム入力後の確定
-
MS.Access でサブフォーム付の...
-
MSAccess ロック状態かどうかを...
-
エクセルで、抽出したデータだ...
-
Accessのコンボボックスでリス...
-
Access サブフォームでの選択行...
-
Accessでデータを更新したらそ...
-
Accessフォーム 大分類→小分類...
-
ACCESS クエリ 条件以外のレ...
-
エクセル VBA メール本文に指定...
-
Access2000 サブフォームのReco...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS 複数のフォームから同一...
-
Accessフォームで詳細内の任意...
-
Accessでレコードの複製
-
accessでオートナンバーを使わ...
-
ACCESSフォーム入力後の確定
-
AccessのRefresh・Requery・Rep...
-
Accessで経過日付に応じて色を...
-
access の 最終レコードの判定...
-
MSAccess ロック状態かどうかを...
-
アクセエスのレコードの更新をV...
-
MS.Access でサブフォーム付の...
-
Accessの「Form_AfterUpd...
-
DoCmd.SearchForRecord が動か...
-
ファイルメーカーProでレコード...
-
Access 指定したレコードへ移動
-
ACCESS 単票形式フォームの新...
-
ファイルメーカーで重複してイ...
-
ファイルメーカーのレコード複...
-
AccessVBA フィルタとカレント...
-
アクセスで複数レコードを1レ...
おすすめ情報