更新日:、 作成日:
VBA エラー プライベート オブジェクト モジュールを、パブリック オブジェクト モジュール内で、パブリック プロシージャの引数または戻り値、パブリック データ メンバー、またはパブリックのユーザー定義型のフィールドとして、使用することはできません。
はじめに
Excel VBA マクロのエラー「プライベート オブジェクト モジュールを、パブリック オブジェクト モジュール内で、パブリック プロシージャの引数または戻り値、パブリック データ メンバー、またはパブリックのユーザー定義型のフィールドとして、使用することはできません。」の対処法を紹介します。
Instancing プロパティが Private のクラスを Public で公開したときに発生します。
エラーの基本的な対処法は、エラー箇所の特定とその原因となったコードをデバッグします。
デバッグについては「デバッグの仕方」をご覧ください。
エラー処理については「エラー処理をする」をご覧ください。
解決する
クラスには Instancing プロパティがあり PublicNotCreatable か Private を選択できます。
PublicNotCreatable のモジュール内で Private のモジュールを Public で公開すると発生します。Sheet1 などは PublicNotCreatable になっています。クラスの既定値は Private です。
PublicNotCreatable に設定されている ClassPublicNotCreatable と Private に設定されている ClassPrivate を例にします。
' Sheet1 (PublicNotCreatable) のコード
Public 変数 As ClassPrivate ' エラー
Public 変数2 As ClassPublicNotCreatable ' OK
Public Sub サブ(引数 As ClassPrivate) ' エラー
End Sub
Public Function 関数() As ClassPrivate ' エラー
End Function
' ClassPrivate のコード
Public 変数 As ClassPublicNotCreatable ' OK
Public 変数2 As ClassPrivate ' OK
Public Sub サブ(引数 As ClassPublicNotCreatable) ' OK
End Sub
Public Function 関数() As ClassPublicNotCreatable ' OK
End Function
標準モジュールなら、どちらも Public で公開できます。
Sheet1 などから Public で公開する必要があるときは Instancing プロパティが PublicNotCreatable になっているか確認すると解決します。