
度々すみません。
Access初心者です。よろしくお願いします。
例えば「基本情報フォーム」から、「付帯データ入力フォーム」を起動する作りになっていたとします。
この場合、基本情報フォームは閲覧専用で、付帯データ入力フォームは入力用フォームになると思います。
しかし、コマンドボタンの追加ウィザードで両方のフォームで取り扱う「ID」で絞り込んで入力フォームを開こうとすると、うまく行きません。
単純に、入力フォーム単体で立ち上げると、入力できます。
やりたいことは単純で、閲覧フォーム上のIDを、入力用フォームのIDフィールドに表示させたいだけなのですが。。。
解決策をご存知の方がいらっしゃいましたら、ご教授お願いいたします。
No.3ベストアンサー
- 回答日時:
#2です
> 入力用フォームのほうにはある「区分」が用意されており、区分コードをコンボボックスで選択する作りになっています。
> その場合でも、1つのフォームでできるのでしょうか?
> 「表示フォーム」は区分コードに紐づいている「区分名」が表示されるようにしてあります。
コンボボックスの内容(連結列)が同じであれば、同様に既定値を設定できます。
コンボボックス名が「cbx01」だったとします。
表示の元となる区分テーブル「T区分」が以下だったとします。
区分コード 区分名
1 区分A
2 区分B
3 区分C
4 区分D
5 区分E
コンボボックスの値集合ソースが
SELECT 区分コード, 区分名 FROM T区分;
連結列:1
列数:2
表示フォームでの列幅: 0cm;2cm (1列目を表示しない:区分名だけ表示)
入力フォームでの列幅: 2cm;0cm (2列目を表示しない:区分コードだけ表示)
この設定で、コンボボックスに表示されるものは変わりますが、連結されているものは「区分コード」になっているので、
Me.cbx01.DefaultValue = Screen.ActiveForm.cbx01
で既定値を設定することができます。
(起動元に同様のコンボボックスがあったとして)
表示用/入力用ともコントロールソースには「区分コード」に対応するフィールドを指定していると思いますので、問題なさそうな気がします。
なお、起動元に「区分名」しかない時とかは、その時のテキストボックス名を「txt1」とすると、
Me.cbx01.DefaultValue = _
DLookup("区分コード", "T区分", "区分名 = '" & Screen.ActiveForm.txt1 & "'")
とすれば既定値として設定できます。
列幅(表示)の切り替えは、ColumnWidths で変更します。
列幅が上記例であるとすれば、
レコードがあったら、Me.cbx01.ColumnWidths = "0cm;2cm"
入力用なら、Me.cbx01.ColumnWidths = "2cm;0cm"
と設定すれば、表示は切り替わります。
補足情報、ありがとうございました。
ちょっとチャレンジしたのですが、分岐先の2つのフォームに微妙な差異があり、うまく制御できませんでした。
どうもすみません。
もうすこしAccessになれたら、この情報を有効活用させていただきます。
ありがとうございました。
No.2
- 回答日時:
「基本情報フォーム」、「付帯データ入力フォーム」の両方に、テキストボックス名「ID」があったとします。
「付帯データ入力フォーム」の開く時イベントに以下を記述します。
Private Sub Form_Open(Cancel As Integer)
On Error Resume Next
Me.ID.DefaultValue = Screen.ActiveForm.ID
End Sub
起動したフォームにある「ID」を、起動された方の「ID」の既定値として設定します。
「基本情報フォーム」からの起動に限定せず、「基本情報フォーム」に似通ったものからの起動でも動作します。
(但し「ID」には、同じ意味を持たせておく必要がありますが)
蛇足)
「付帯データ入力フォーム」の他に、表示項目が一緒の「付帯データ表示フォーム」があったとした場合、
開く時イベントに処理を追加すると、1つのフォームでできるようになります。
フォーム名を「付帯データ」と仮定した時、
起動する時の例)
表示対象のIDを条件指定します
Private Sub ボタン_Click()
DoCmd.OpenForm "付帯データ", , , "ID=" & Me.ID
End Sub
起動された側の開く時イベント例)
IDの既定値に起動したフォームのIDを設定後、
表示対象がなかったらフォームを入力用に切り替え。
あったら追加を許可しないように。
Private Sub Form_Open(Cancel As Integer)
On Error Resume Next
Me.ID.DefaultValue = Screen.ActiveForm.ID
If (Me.Recordset.RecordCount = 0) Then
Me.AllowAdditions = True
Me.DataEntry = True
Else
Me.AllowAdditions = False
End If
End Sub
※フォーム「付帯データ」は、全件表示できるようにしておく必要がありますが。
(「ID」が数値型の時の例となります:起動する時の "ID=" & Me.ID 部分)
ご回答ありがとうございました。
Activeなフォーム(元フォーム)のフィールドの値を先フォームで規定値として引っ張る、ということですね。
すごくわかりやすくて、参考になりました。
また、「蛇足」のほうですが、入力用フォームのほうにはある「区分」が用意されており、区分コードをコンボボックスで選択する作りになっています。
その場合でも、1つのフォームでできるのでしょうか?
「表示フォーム」は区分コードに紐づいている「区分名」が表示されるようにしてあります。
No.1
- 回答日時:
基本情報フォーム:frm1
テキストボックス:frm1_txID
付帯データ入力フォーム:frm2
テキストボックス:frm2_txID
とする。
基本情報フォームfrm1に単純に
付帯データ入力フォームfrm2を
開くボタンを設置。
付帯データ入力フォームfrm2に以下を貼り付け保存。
Private Sub Form_Open(Cancel As Integer)
If IsLoaded("frm1") Then
If Not IsNull(Forms![frm1]![frm1_txID]) Then
Forms![frm2]![frm2_txID] = Forms![frm1]![frm1_txID]
End If
End If
End Sub
'フォームが開かれているか確認する関数
'標準モジュールに置いてもよい
Function IsLoaded(strFormName As String) As Boolean
Const FORMCLOSED = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> FORMCLOSED Then
IsLoaded = True
Else
IsLoaded = False
End If
End Function
これで、frm1のテキストボックスに数値を
入れてfrm2を開くボタンを押すと開かれた
frm2のテキストボックスにfrm1テキスト
ボックスの数値が表示される。
ご回答ありがとうございます。
元フォームが開かれているか確認し、開かれていれば「ID」の値を開く先のフォームで引っ張ってきてコピーする、ということですね。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- Access(アクセス) access レポート 請求書について 2 2022/07/04 22:52
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access 別フォームへの再クエ...
-
Accessのフォーム上にレコード...
-
ACCESSのフォームからデータの...
-
Access2002 閲覧フォームから入...
-
ACCESSのフォームに関して質問...
-
Accessでの累計の出し方について
-
Access:フォームをクリ...
-
access2000で存在しないデータ...
-
選択したチェックボックスのみ...
-
ACCESSでテーブルから選択,表示...
-
アクセスのフォームで連結コン...
-
アクセスのフォームのビューが...
-
access2000で名簿を作っている...
-
Access2002 フォームを閉じるた...
-
アクセス非連結フォームのテキ...
-
Access コマンドボタンクリッ...
-
「#エラー」と表示されてしまう
-
ACCESSでのテキストボックスの...
-
帳票フォームに全レコードを表...
-
Access2000で、コンボボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのフォームからデータの...
-
選択したチェックボックスのみ...
-
Accessのフォーム上にレコード...
-
アクセスのフォームのビューが...
-
アクセスでテーブルの変更内容...
-
Access 別フォームへの再クエ...
-
ACCESSで入力フォームをHTMLフ...
-
Access2002 フォームを閉じるた...
-
accessの自動更新処理をできな...
-
Accessフォームのテキストボッ...
-
アクセスでの項目追加について...
-
ADOでRecordsetオブジェクトを...
-
Accessのフォームで作業領域を...
-
Accessのハイパーリンクのパス...
-
[至急]accessクエリ結果を入力...
-
「メソッドまたはデータメンバ...
-
アクセス 0以外をカウントす...
-
オートシェイプのような作図入...
-
入力途中の入力した値をすべて...
-
Access フォーム上でコンボボッ...
おすすめ情報