度々すみません。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス 0以外をカウントす...
-
ACCESSで入力フォームをHTMLフ...
-
「メソッドまたはデータメンバ...
-
Access フォーム上でコンボボッ...
-
Accessのフォーム上にレコード...
-
ACCESSのフォームからデータの...
-
選択したチェックボックスのみ...
-
アクセスでテーブルの変更内容...
-
Accessのフォームに表示...
-
[至急]accessクエリ結果を入力...
-
テキストボックスの値をテーブ...
-
Access 別フォームへの再クエ...
-
ACCESSでのテキストボックスの...
-
Accessフォームのテキストボッ...
-
Accessのフォームで作業領域を...
-
フォームがクラシック表示にな...
-
ACCESSの表形式で、レコードを...
-
Accessを使って日付を比較したい
-
別のテーブルのフィールドを抽...
-
Accessで「クエリーが複雑すぎ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのフォームからデータの...
-
Accessのフォーム上にレコード...
-
アクセスのフォームのビューが...
-
accessの自動更新処理をできな...
-
Access 別フォームへの再クエ...
-
選択したチェックボックスのみ...
-
アクセスでテーブルの変更内容...
-
ACCESSで入力フォームをHTMLフ...
-
「メソッドまたはデータメンバ...
-
アクセスでの項目追加について...
-
Accessフォームのテキストボッ...
-
アクセス 0以外をカウントす...
-
Accessのフォームで作業領域を...
-
Access2002 フォームを閉じるた...
-
ADOでRecordsetオブジェクトを...
-
Accessのハイパーリンクのパス...
-
Access フォーム上でコンボボッ...
-
ACCESS フォームにデータ入力で...
-
入力途中の入力した値をすべて...
-
ACCESSでのテキストボックスの...
おすすめ情報