• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:オブジェクト型の変数にフォームを入れたい)

VBAでオブジェクト型の変数にフォームを入れる方法

このQ&Aのポイント
  • VBAでAccessのオブジェクト型の変数にフォームを入れる方法を探しています。現在のコードでは、Set f = obj.Nameの行で「型が一致しません。」のエラーが発生しています。しかし、Set f = objに変更すると実行時エラー13が発生します。オブジェクト型の変数にフォームの名前を入れて操作する方法を教えてください。
  • VBAを使用してAccessのオブジェクト型の変数にフォームを入れる方法について質問です。現在のコードでは、Set f = obj.Nameの行で「型が一致しません。」のエラーが出ています。しかし、Set f = objに変更すると実行時エラー13が発生します。オブジェクト型の変数にフォームの名前を入れて操作するための正しい方法を教えてください。
  • AccessのVBAでオブジェクト型の変数にフォームを格納する方法を知りたいです。現在のコードでは、Set f = obj.Nameの行で「型が一致しません。」というエラーが表示されます。ただし、Set f = objに変更すると実行時エラー13が発生します。オブジェクト型の変数にフォームの名前を入れて操作するための適切な方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

ちょっといじってみました。 Set f = obj.Nameでは、オブジェクトに文字列を代入しようとしていますね。 Set f = Forms(obj.Name)なら良いと思いましたが、フォームが開いていないとエラーになりますのでisloadedで判別する必要があります。(これが実行時エラーの原因かも) であれば、test2()の方は開いているフォームしか対象にならない様なので同じ事かなとも思いました。 ただ、何をなさりたいか分かりませんが、先日別件で調べて知ったばかりですが、フォームのプロパティの操作はデザインモードで開かないと(非表示でも可)出来ない様ですのでご参考までに。 Sub test() Dim obj As AccessObject Dim f As Form For Each obj In CurrentProject.AllForms If obj.IsLoaded Then '開いていないとエラーになる Set f = Forms(obj.Name) '色々操作するコード End If Next End Sub Sub test2() Dim f As Access.Form For Each f In Access.Forms '色々操作するコード Debug.Print f.Name Next End Sub

wovbnjcmxn8
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.3

>Dim f As Form とした場合、f はオブジェクト型の変数ではありません。 オブジェクト型の変数として使用するのであれば Dim obj As AccessObject Dim f As Object For Each obj In CurrentProject.AllForms  Set f = obj  Debug.Print f.Name  色々操作するコード Next とします。

wovbnjcmxn8
質問者

お礼

ありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

Set命令は左辺がオブジェクト型の 場合にのみ使用します。 Nameプロパティは文字型であり、 オブジェクト型ではありません。 よって、Set f = obj.Nameは間違い です。 >Set f = obj f はForm、obj はAccessObjectです。 型が違うのでエラーになります。 型が特定できない場合は変数を ObjectかVariant型で定義すれば とりあえず、「型が一致しません。」は 避けられます。

wovbnjcmxn8
質問者

お礼

ありがとうございました。

関連するQ&A