- ベストアンサー
VBAでオブジェクト型の変数にフォームを入れる方法
- 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が発生します。オブジェクト型の変数にフォームの名前を入れて操作するための適切な方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ちょっといじってみました。 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
その他の回答 (2)
- don_go
- ベストアンサー率31% (336/1059)
>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 とします。
お礼
ありがとうございました。
- nda23
- ベストアンサー率54% (777/1415)
Set命令は左辺がオブジェクト型の 場合にのみ使用します。 Nameプロパティは文字型であり、 オブジェクト型ではありません。 よって、Set f = obj.Nameは間違い です。 >Set f = obj f はForm、obj はAccessObjectです。 型が違うのでエラーになります。 型が特定できない場合は変数を ObjectかVariant型で定義すれば とりあえず、「型が一致しません。」は 避けられます。
お礼
ありがとうございました。
お礼
ありがとうございました。