Microsoft Access 掲示板

クエリに、あるテーブルの該当する若い番号から4つ入れたい。

14 コメント
views
4 フォロー

この質問に絡む件ですが、
(↑の件は確認していただかなくても大丈夫です)
新たに質問があり、メールいたします。

「F_メンバー」の中に「F_サブ所属部署」があります。
「F_サブ所属部署」は多くても4件くらいです。
この2つの情報を繋いでいる「T_メンバー所属部署」が存在しています。

現在「F_メンバー」からメール作成ボタンを押すと、「F_メール」が立ち上がって
テンプレから引用したメールを作成するのですが
その時、該当の「F_サブ所属部署」に登録している
所属部署①、所属部署②、所属部署③、所属部署④の情報をメールに入れ込みたいです。
つまり、「Q_メール」に「T_メンバー所属部署」でメンバーIDに紐づいた所属部署IDの若い者から4つ
入れたいということになります。

わかりづらいでしょうか。。。
可能であれば方法を教えていただきたく。。
クエリに入れるのは不可能で、VBAでの対応になりますでしょうか?
何卒宜しくお願い致します。

どんぐりず
作成: 2021/02/05 (金) 12:42:05
通報 ...
1
どんぐりず 2021/02/07 (日) 18:02:30 f1ed8@e2de4

すみません、この質問の件について考えていて、改めて何がしたいのかわかりました‥。
フォームの中にサブフォームを作り、それを単票表示にして、その単票データをタブで切り替えるように見せることはできますでしょうか?
多くても4個くらいなのですが‥。

2
hiroton 2021/02/10 (水) 11:41:59 fc00d@f966d >> 1

サブフォームを単票フォームにするのならばタブの選択に合わせてレコードが移動できるようにすればいいですね
それと、親フォームのレコード移動時にサブフォームのレコード数に合わせてタブの表示/非表示を切り替えればよさそうです

新たに作るサブフォームを[部署データ]とします
タブコントロール[所属部署タブ]を設置します
[所属部署タブ]にページコントロールを[ページ0]~[ページ3]まで設置します

Private Sub Form_Current()
    Const max部署 = 3
    Dim cnt部署 As Long
    Dim i As Long

    cnt部署 = Me!部署データ.Form.Recordset.RecordCount
    cnt部署 = IIf(cnt部署 > max部署, max部署, cnt部署)

    me!所属部署タブ = 0

    For i = 1 To cnt部署 - 1
        Me("ページ" & i).Visible = True
    Next
    
    For i = cnt部署 To max部署
        Me("ページ" & i).Visible = False
    Next
End Sub

Private Sub 所属部署タブ_Change()
    Me!部署データ.Form.Recordset.Move 所属部署タブ - (Me!部署データ.Form.CurrentRecord - 1)
End Sub

3
どんぐりず 2021/02/10 (水) 16:47:44 f1ed8@e2de4 >> 2

回答がついてとてもうれしいです!明日確認してみます。

4
hiroton 2021/02/10 (水) 17:28:13 fc00d@f966d >> 1

コード訂正

Private Sub Form_Current()
    Const max部署 = 4 '//この行を訂正
    Dim cnt部署 As Long
    Dim i As Long

    cnt部署 = Me!部署データ.Form.Recordset.RecordCount
    cnt部署 = IIf(cnt部署 > max部署, max部署, cnt部署)

    me!所属部署タブ = 0

    For i = 1 To cnt部署 - 1
        Me("ページ" & i).Visible = True
    Next
    
    For i = cnt部署 To max部署 - 1 '//この行を訂正
        Me("ページ" & i).Visible = False
    Next
End Sub

Private Sub 所属部署タブ_Change()
    Me!部署データ.Form.Recordset.Move 所属部署タブ - (Me!部署データ.Form.CurrentRecord - 1)
End Sub

添え字(0~)と数(1~)の対応で処理に間違いがあったので修正しておきます

5
どんぐりず 2021/02/13 (土) 10:41:55 0029a@1c915 >> 4

遅くなりましたが、できました!!素晴らしいです。
追加で質問ですが、現在登録済みだった所属部署は表示されるのですが、新規で所属部署を登録する画面の作成方法がわからず…
質問ばかりで申し訳ありませんが、ご教示願えませんでしょうか。

6
どんぐりず 2021/02/13 (土) 11:19:09 0029a@1c915 >> 4

追伸:
プロパティで「移動ボタン」を表示するときちんと2つ目の商品タブが表示されますが、表示しないを選択すると1つ目のタブしか表示されません。なぜでしょうね・・?

9
hiroton 2021/02/16 (火) 09:24:24 1ab75@f966d >> 4

hirotonの環境では再現できませんでした。たとえばForm_Currentに追加したコードをすべて削除すると(ページの表示ON/OFF機能を削除すると)ページは常に表示されたままになっていますか?

11
どんぐりず 2021/02/17 (水) 13:31:59 0029a@1c915 >> 4

コードを全て削除すると、1つ目のタブのみ表示される状態になりました。

12
どんぐりず 2021/02/17 (水) 13:33:09 0029a@1c915 >> 4

ちなみにこのとき、「移動ボタン」を表示していると1つ目のタブの状態でレコード2へ移動可能です。

8
hiroton 2021/02/16 (火) 09:02:59 1ab75@f966d >> 1

新規で所属部署を登録する画面

新規登録用の画面自体は[部署データ]フォームですか?
[所属部署タブ]タブに[ページ4]を追加します

Private Sub 所属部署タブ_Change()
    If Me!所属部署タブ = 4 Then
        Me!部署データ.Form.Recordset.AddNew
    Else
        If Me!部署データ.Form.NewRecord Then Me!部署データ.Form.Recordset.MoveFirst
        Me!部署データ.Form.Recordset.Move 所属部署タブ - (Me!部署データ.Form.CurrentRecord - 1)
    End If
End Sub

[ページ4]を選択すると新規登録用のレコードに飛ぶようになります。少し手抜きな部分(新規登録から既存のレコードに移るとちらつくかも)がありますが、動作を確認してみてください

ちなみに、このコードだけだと、実際に新規レコードが追加されてもタブの表示は変わりません。「新規で所属部署が登録されたとき」にページのON/OFFを見直す必要があります。親フォームとサブフォームを行ったり来たりな処理でちょっと大掛かりになるので、続きが必要な場合にいは改めて質問を立てなおしてください(大元の質問は、それはそれで続けているようなので)

13
どんぐりず 2021/02/17 (水) 13:34:43 0029a@1c915 >> 8

結構大掛かりになってきたのですね。ちょっと一旦考え直してみます。ありがとうございます!

7
どんぐりず 2021/02/13 (土) 22:07:50 0029a@1c915

追伸:
最初の質問に改めて戻るのですが

「F_メンバー」の中に「F_サブ所属部署」があります。
 「F_サブ所属部署」は多くても4件くらいです。
この2つの情報を繋いでいる「T_メンバー所属部署」(メンバーIDと所属部署IDが主キー)が存在しています。

「Q_メンバー所属部署」の中に、特定のメンバーIDを指定した時「所属部署①」「所属部署②」「所属部署③」「所属部署④」を引っ張ることはできますでしょうか。

10
どんぐりず 2021/02/17 (水) 12:13:51 0029a@1c915

hiroton様ありがとうございます。
いただいた内容を確認してまいります。

新たに問題が発生しました。
こちらの「F_メンバー」を削除しようとすると
以下エラーが起きて削除できません。
実行時エラー 2101
プロパティの設定値として指定した値が正しくありません。

デバッグで指定される色が付くコードの部分は
me!所属部署タブ = 0

14
名前なし 2021/02/17 (水) 16:04:34 130d7@f966d >> 10

元の質問が埋もれてしまうので回答を別トピックに分離しました
どんぐりずさんへ回答(タブ表示でレコード移動)