Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2013)
フォーム名の一部に変数名を使用する方法
投稿日時: 21/03/24 15:33:14
投稿者: やま3

F_担当者11,F_担当者12,F_担当者131,・・・・・・F_担当者29,F_担当者20
 
と20個のフォームがあります
 
このフォームに対して順次処理をおこない
 
FOR I =11 TO 30
  IF If (Forms![F_担当者11]!件数 > 0) Then   
    ・・・・処理・・・・
  END IF  
 
NEXT I
 
この11を変数にして順次フォームに対して処理を行いたい
 
どなたかご教示ください

回答
投稿日時: 21/03/24 15:59:34
投稿者: sk

引用:
F_担当者11,F_担当者12,F_担当者131,・・・・・・F_担当者29,F_担当者20
  
20個のフォームがあります

引用:
この11を変数にして順次フォームに対して処理を行いたい

既にそれら 20 個のフォームの全てが同時に開かれている状況で、
ということでしょうか。
( 20 個ものフォームを同時に開く必要がある状況や理由というのが
想像できませんが)
 
それとも、いずれかの(あるいは全ての)フォームが
閉じられている状況で、ということでしょうか。

回答
投稿日時: 21/03/24 16:19:53
投稿者: Suzu

直接の回答とすれば

Sub sample()
  Dim i As Long

  For i = 11 To 30
    If Forms("F_担当者" & i)![件数] > 0 Then
       :
    End If
  Next
End Sub
となるでしょう。
 
フォームを上記の様な方法する為には、フォームが開いている必要があります。
閉じているのであれば、直前にフォームを開く処理が必要です。
 
 
 
ですが、テキストボックス名が同じであり、フォーム名も似たような名称
である事から、担当者毎にフォームがある様に見えます。
 
担当者毎に、フォームを用意する必要があるのでしょうか?
 
 
コントロール等の配置が同じであり、
レコードソースが違う為だけにフォーム分けているのであればその必要はありません。
 
 
1. フォームヘッダー等に、担当者を入力するテキストボックスを配置。
  サブフォームコントロールを配置し、ソースオブジェクトに F_担当者11 を設定
2. フォームのレコードソースのクエリの抽出条件に、先のテキストボックスを参照する様にし
3. テキストボックスの更新後処理にて、再クエリを行う設定にしてはどうでしょう。
 
そうすれば、担当者毎にフォームを分ける必要はありません。
(多少のコントロールの差異がある程度であれば、コントロールの表示/非表示 で対応も取れますね)
 
 
サブフォームではなく、
   当該フォームを開く前のフォームにて、担当者を入力させ
   レコードソースでは、入力した担当者のコントロールを参照
  の様にしても良いでしょう。
   ただし、この場合、別担当者のレコードを表示する場合には、
   前のフォームのコントロールの値を変える必要があります

投稿日時: 21/03/24 16:39:01
投稿者: やま3

早速の回答ありがとうございました
直近の問題は解決しました
 
アドバイス頂いた内容は早速検討します