Microsoft Access 掲示板

ユーザー定義関数にできるか

6 コメント
views
4 フォロー

下記のようなボタンが沢山あります。
ボタン名とフォーム名が同じものなので、ユーザー定義関数にできないかと思うのですが・・・
どうでしょうか。

Private Sub btn診療リスト_click
  DoCmd.OpenForm"F_診断リスト,acNormal,"","", ,acDialog
End Sub
リモコン
作成: 2020/10/28 (水) 17:53:29
通報 ...
1
リモコン 2020/10/28 (水) 18:01:01 1d451@2b9f5

現在「診断リスト」から、各「診断カルテ」を開くボタンがあります。
「診断リスト」は開いたまま上に「診断カルテ」を開く状態です。
「診断カルテ」にて、フィールド「タイトル」を変更した際、「診断カルテ」を閉じて
「診断リスト」を見ると、「タイトル」は変更されていません。
「診断カルテ」の閉じるボタンを以下にしてみましたが・・・ダメでした。
どうすればリアルタイムで変更が反映されるようになるのでしょうか。

Private Sub btn閉じる_Click
me.refresh
DoCmd.Close acform,"F診断カルテ",acSaveYes
End Sub
2
リモコン 2020/10/28 (水) 18:01:44 1d451@2b9f5 >> 1

新しいスレッドを立てて違う質問を書くつもりが、うっかり同じスレッドに2つ書いてしまいました。
分けた方がよかったでしょうか?
申し訳ありません。

5
リモコン 2020/10/29 (木) 10:37:44 1d451@2b9f5 >> 2
Private Sub btn閉じる_Click
me.refresh
DoCmd.Close acform,"F診断カルテ",acSaveYes
Forms!F診断リスト.refresh
End Sub

上記のコードでもうまくいきませんでした。

また、F診断カルテで情報を追記し、診断テーブルで情報が追記されていることを確認できている状況で
F診断リストで「me.refresh」を試みても更新ができませんでした。
F診断リストを一回閉じて開きなおすと、更新ができます。
閉じて開きなおす、というVBAを実行するべきなのでしょうか…?

4
hiroton 2020/10/29 (木) 10:34:33 16ef8@f966d

クリックしたボタンならMe.ActiveControlで取得できます

Private Sub btn診療リスト_click
    MsgBox Me.ActiveControl.Name '//->「btn診療リスト」が表示される
End Sub

ボタン名:btn診療リスト
フォーム名:F_診断リスト

MsgBox IIf("btn診療リスト" = "F_診断リスト", "同じ", "異なる") '//->異なる

質問の内容だとボタン名とフォーム名は同じではないですね
ボタンの画面上に表示している文字ならそれは標題です。VBAならCaptionで取得できます

ユーザー定義関数とする場合、一つのフォームで使うだけならそのフォームのモジュールに記述してMeキーワードでいいですが、様々なフォームで使おうとするなら標準モジュールに記述することになりMeは使えません。そんなときにはCodeContextObjectを使います

あとはまぁ、どうしてもフォーム名を直接指定したいなんて場合もでるでしょう

Public Function myFormOpen( Optional formName As String)
    DoCmd.OpenForm IIf( formName <> "", formName, CodeContextObject.ActiveControl.Caption ), , , , ,acDialog
End Function
6
リモコン 2020/10/29 (木) 10:58:52 1d451@2b9f5 >> 4

標題の質問にお答えいただきありがとうございます!確認します。