更新日:、 作成日:

VBA エラー プライベート オブジェクト モジュールを、パブリック オブジェクト モジュール内で、パブリック プロシージャの引数または戻り値、パブリック データ メンバー、またはパブリックのユーザー定義型のフィールドとして、使用することはできません。

はじめに

Excel VBA マクロのエラー「プライベート オブジェクト モジュールを、パブリック オブジェクト モジュール内で、パブリック プロシージャの引数または戻り値、パブリック データ メンバー、またはパブリックのユーザー定義型のフィールドとして、使用することはできません。」の対処法を紹介します。

Instancing プロパティが Private のクラスを Public で公開したときに発生します。

エラーの基本的な対処法は、エラー箇所の特定とその原因となったコードをデバッグします。

デバッグについては「デバッグの仕方」をご覧ください。
エラー処理については「エラー処理をする」をご覧ください。

解決する

クラスには Instancing プロパティがあり PublicNotCreatable か Private を選択できます。

1

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 になっているか確認すると解決します。