
Access VBAについて質問です。
現在業務で利用している小さなプログラムですが、勉強しつつ開発しています。
多くのフォームがあり、
それぞれのフォームでForm_Open時イベントで、標準モジュール記載の「Form_Init」処理を共通して実行しています。(Form_Initではフォームの全画面表示や、テキストボックスやラベル等のコントトロールに対して共通処理を実行。)
これを、クラスモジュールを利用できないかと思い質問させていただきます。
【仮で作成したCls_cmnFormクラスモジュール】
Public Sub Form_Init(Byval ThisForm as Object)
'''<フォーム以外の時は処理を抜ける>
If Not ThisForm.Name Like ("Frm_*") Then
Exit Sub
End If
'''<フォームの共通処理>
With ThisForm
.RecordsetType = 4
.ScrollBars = 0
.Modal = false
.Menubar = ""
~~ 中略 ~~
End With
End Sub
【仮で作成したFrm_ClassTestフォームオブジェクト】
Private ThisForm as New Cls_Form
Private Sub Form_Open(Cancel as Integer)
'''<フォームの初期化処理>
ThisForm.Form_Init(Me)
End Sub
これでフォームを開こうとすると「実行時エラー:438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。」と表示されます。
なんとなく<フォームの共通処理>で設定しているプロパティの値がおかしいのかと思いますが、対処方法が見つかりません。
フォーム自体を引数にしてプロシージャを実行すること自体がおかしいのでしょうか?
解決方法がわかる方いましたらご教授ください。

No.1ベストアンサー
- 回答日時:
'Private ThisForm As New Cls_Form
'↓
Private ThisForm As New Cls_cmnForm
で、エラーにはなりませんでしたが...
~~ 中略 ~~
に問題があるのでは...
ステップ実行で、どこでエラーになるか調べてください。
cmnが抜けていましたね。。。
ただ、クラス名を正しく入力してもエラーを吐いてしまいました。
解決方法として、
クラスモジュールのメンバ変数に
「Private ThisForm As Object」を定義し、
Form_Init処理時に、
引数のフォームオブジェクトをメンバ変数にセットし、
そのメンバ変数に対して共通処理を走らせることで、
解決することができました。
自己解決となり申し訳ないです。ありがとうございます。
【解決したCls_cmnFormクラスモジュール】
'''<メンバ変数定義>
Private ThisForm As Object
'''<フォーム初期化処理>
Public Sub Form_Init(Byval Form as Object)
'''<変数セット>
Set ThisForm = Form
'''<フォーム以外の時は処理を抜ける>
If Not ThisForm.Name Like ("Frm_*") Then
'''===Dlg_*の場合に別処理を走らせる方法を検討===
Exit Sub
End If
'''<フォームの共通処理>
With ThisForm
.RecordsetType = 4
.ScrollBars = 0
.Modal = false
.Menubar = ""
~~ 中略 ~~
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
Accessのクエリの結果を、既存...
-
access2021 強制終了してしまう
-
access2021 VBA メソッドまたは...
-
Access Error3061 パラメータが...
-
Access VBA [リモートサーバー...
-
アクセスの更新クエリでカレン...
-
ACCESS VBA でのエラー解決の根...
-
AccessVBAで任意の複数リンクテ...
-
Microsoft365にAccessってあり...
-
Accessのクエリで、replace関数...
-
Excelを開く時と閉じる時に一度...
-
列が255以上のCSVファイルをAcc...
-
Accessのフォーム上のテキスト...
-
エクセルのVBAについて教えてく...
-
Access で半角スペースと全角ス...
-
MS.Access でサブフォーム付の...
-
Accessのレポートについて
-
access2019の起動が遅い
-
access2021 メッセージボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
Accessのクエリで、replace関数...
-
access2021 強制終了してしまう
-
ACCESS VBA でのエラー解決の根...
-
Access VBA [リモートサーバー...
-
Accessのスプレッドシートエク...
-
Accessのレポートについて
-
access2021 VBA メソッドまたは...
-
Access Error3061 パラメータが...
-
access2019 チェックボックスと...
-
Accessのクエリの結果を、既存...
-
accessでlaccdbファイルが削除...
-
Access VBA を利用して、フォル...
-
accessデータを指定したExcel、...
-
Accessのリンクテーブルのパス...
-
列が255以上のCSVファイルをAcc...
-
Accessのクエリの印刷設定
-
Accessでレポートを印刷する時...
-
Accessフォームの配色テーマを...
-
Accessデータベースに含まれる...
おすすめ情報