Microsoft Access 掲示板

連結テキストボックスを非連結テキストボックスに?

10 コメント
views
4 フォロー

お世話になります。
現在郵便を送るための住所欄につきまして、普段は登録している企業を選択したら情報を引っ張ってくるのですが、たまに1回だけ送るような企業が存在します。
わざわざ企業登録フォームから登録するのも手間だし不要なので、直接住所欄に記入したいのですが…。そんなことは可能でしょうか。
タイトルのように普段は連結テキストボックス(またはこんぼぼっくす)を
非連結ボックスに変身させたいというわがままな要望になります。

「今回限り」みたいな別フォーム(ポップアップ)を作って、簡易登録させて
追加クエリで、、とかになりますでしょうか。

ポンタ
作成: 2020/11/25 (水) 11:29:52
通報 ...
1
hatena 2020/11/25 (水) 15:27:51 修正

「現在郵便を送るための住所欄」があるフォームのレコードソースは何でしょうか。

テーブル名 郵送履歴
フィールド名 郵送履歴ID、発送日、企業CD
というような感じでしょうか。

「普段は登録している企業を選択したら情報を引っ張ってくる」とは具体的にどのように実現してますか。
(コンボボックス、オートルックアップクエリ、VBA・・・)

フォームは単票フォームですか。

4
ポンタ 2020/11/26 (木) 13:14:36 0029a@1c915 >> 1

現在は郵送履歴は残していませんでしたが、残したいと思っていたので
先程記載した現状のフィールドに「発送日」も追加予定です。

2
ポンタ 2020/11/26 (木) 13:08:50 0029a@1c915

ご確認ありがとうございます。「F送付」のレコードソースはクエリになっています。
住所等の情報は「T会社情報」にあり、「Q送付」にひっぱっています。
Q送付のフィールド名は 送付ID、郵便番号、住所1、住所2、会社ID、会社名、部署名、氏名ID、氏名、送付資料1、送付資料2・・
といった感じです。

「普段は登録している企業を選択したら情報を引っ張ってくる」についてですが、
「F送付」の「cbo氏名ID」にて氏名を選択すると以下VBAが動きます。

Private Sub cbo氏名ID_AfterUpdate()
    Me.cbo氏名ID.Requery
    If Me.txt住所1 = "" Then
    
    MsgBox "住所が入力されていません。"
    ElseIf Me.txt郵便番号 = "" Then
    MsgBox "郵便番号が入力されていません。"
    End If
End Sub

フォームは帳票です。
アイデアがあるとうれしいです。ご検討ありがとうございます。

3
ポンタ 2020/11/26 (木) 13:10:15 0029a@1c915 >> 2

フォームは帳票にしていますが、よく考えたら単票でもいいです。
都合の良い方で宜しくお願い致します。

5

不足している情報は勝手に推測して、テーブルは下記と仮定します。

T送付履歴
送付ID、発送日、会社ID、送付資料1、送付資料2、・・・

T会社情報
会社ID、会社名、部署名、郵便番号、住所1、住所2、・・・

先頭のフィールドが主キー

T送付履歴 に下記のフィールドを追加します。
仮(Yes/No型)、仮会社名、仮部署名、仮郵便番号、仮住所1、仮住所2

上記のテーブルからクエリを作成してフォームのレコードソースとします。
フォームは単票フォームとします。

会社名、部署名、郵便番号、住所1、住所2 のフィールドはテキストボックスとしてフォーム上に配置します。

「編集ロック」は「はい」にしておきます。(マスターが不用意に更新されないようにするため)
また、フィールドの追加やウィザードで配置したテキストボックスの名前はフィールド名と同じになっているので、それぞれの名前を、
txt会社名、txt部署名、txt郵便番号、txt住所1、txt住所2 というように変更しておきます。

あと「仮」フィールドもフォーム上に配置します。Yes/No型なので、チェックボックスになります。

フォームのモジュールに下記のイベントプロシージャを作成します。

'レコード移動時
Private Sub Form_Current()
    Call 仮_AfterUpdate
End Sub

'仮チェックボックス更新後処理
Private Sub 仮_AfterUpdate()
    If Me.仮 = True Then
        Me.txt会社名.ControlSource = "仮会社名"
        Me.txt会社名.Locked = False
        Me.txt部署名.ControlSource = "仮部署名"
        Me.txt部署名.Locked = False
        Me.txt郵便番号.ControlSource = "仮郵便番号"
        Me.txt郵便番号.Locked = False
        Me.txt住所1.ControlSource = "仮住所1"
        Me.txt住所1.Locked = False
        Me.txt住所2.ControlSource = "仮住所2"
        Me.txt住所2.Locked = False
    Else
        Me.txt会社名.ControlSource = "会社名"
        Me.txt会社名.Locked = True
        Me.txt部署名.ControlSource = "部署名"
        Me.txt部署名.Locked = True
        Me.txt郵便番号.ControlSource = "郵便番号"
        Me.txt郵便番号.Locked = True
        Me.txt住所1.ControlSource = "住所1"
        Me.txt住所1.Locked = True
        Me.txt住所2.ControlSource = "住所2"
        Me.txt住所2.Locked = True
    End If
End Sub

これで、仮チェックボックスにチェックを入れると、会社名、住所等を入力できるようになり、
仮会社名、仮住所1 ・・・に格納されます。

レポートでは、例えば会社名のテキストボックスのコントロールソースは、下記のように設定します。
=IIf([仮]=True,[仮会社名],[会社名])

以上、一例です。

6
ポンタ 2020/11/26 (木) 22:01:38 0029a@1c915

ありがとうございます!
テキストボックスを切り替えることができるのですね!!すごい。
理解できたつもりですが、作成してみてわからないところがでてきたら改めて質問させていただきたいと思っています。
申し訳ありませんが、その際は宜しくお願い致します。
また、色々考えている内に本件について追加の欲望もでてきたので、その件も行き詰ったら質問させていただきたいと思っております。すみません。

7
ポンタ 2020/11/27 (金) 00:51:48 0029a@1c915

早速の質問恐れ入ります。
まず、企業名はコンボボックスだったため以下設定にしてみました。(正しいでしょうか…?)

Private Sub cbo送付先企業ID_Enter()
    If Me.chk未登録 = True Then
    Else
    Me.cbo送付先企業ID.Requery
    End If
End Sub

Private Sub txt送付先企業_Enter()
    If Me.chk未登録 = True Then
    Else
    Me.cbo送付先企業ID.SetFocus
    End If
End Sub

そして、チェックをつけたりはずしたりした時の挙動がよくわからなかったので
実行のタイミングをチェックボックス更新にしてみました…問題ありますでしょうか。

Private Sub chk未登録_AfterUpdate()

(★ここに後述のコードを入れている)
    Call 未登録_AfterUpdate
End Sub

そして今困っている点です。チェックボックスを切り替えたとき、
不要な情報を消したいのですが、色々エラーが出てうまくいきません。。

(★上記の部分)

    If Me.chk未登録 = True Then
        Me.cbo送付先企業ID = Null
        Me.cbo送付先担当者ID = Null
    Else
        Me.txt送付先企業 = Null
        Me.txt送付先担当者 = Null
        Me.txt部署 = Null
        Me.txt郵便番号 = Null
        Me.txt住所1 = Null
        Me.txt住所2 = Null
    End If

まだ作成途中なので、これらの設定では今後不具合が出てくるのかもしれませんが
とりあえずチェックボックスの切替で悩んでいる状況です。

8

可能なら、実際のファイルを見せてもらった方が速いです。
コードだけでは全体像がつかめないし、出ている情報だけからサンプルを作成して動作確認するのもちょっと困難なので。

右カラムの下の方にあるファイル送信フォームから現状のファイルを送信てもらえませんか。
テーブルデータは個人情報も入っていると思いますので、削除しておいてください。

9
ポンタ 2020/11/27 (金) 10:44:40 0029a@1c915 >> 8

ご検討ありがとうございます。
そうですよね。申し訳ありません。
実際のファイルを送ることができないので、時間ができたら簡単なものを作ってみたいと思います。その前に、本件に関する別件で質問です。
(この件もファイルを送らないと伝わりづらかったら申し訳ありません、その場合は改めます)

上記コードの1つ目の件で、登録された企業はコンボボックスとテキストボックスを切り替えて表示しているのですが、未登録企業チェックを入れたときコンボボックスにロックをかけますが、表示されてしまうので紛らわしい状態です。(タブストップも適用される)
コンボボックスを非表示にすることはできますか?

10
hatena 2020/11/27 (金) 10:52:13 修正

コンボボックスを非表示にすることはできますか?

表示/非表示の切り替えは、Visibleプロパティで可能です。

AccessVBAの基本8~可視・使用可能プロパティの変更