更新日:、 作成日:

VBA エラー オブジェクト モジュール内では、パブリック ユーザー定義型は定義できません。

はじめに

Excel VBA マクロのエラー「オブジェクト モジュール内では、パブリック ユーザー定義型は定義できません。」の対処法を紹介します。

標準モジュール以外に Public で構造体 (ユーザー定義型) を宣言したときに発生します。

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

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

解決する

Public で構造体を宣言するには、標準モジュールに入力する必要があります。Sheet1 やクラスなどに宣言すると発生します。

' Sheet1 のコード
Public Type 構造体 ' エラー
    a As Integer
End Type
' 標準モジュールのコード
Public Type 構造体 ' OK
    a As Integer
End Type

Private で宣言するなら、標準モジュール以外にも宣言できます。

スコープについて詳しくは「スコープ」をご覧ください。

Public で宣言する必要があるのか確認し、あるのなら標準モジュールに宣言しているか確認すると原因がわかります。

同様に定数や配列を標準モジュール以外に Public で宣言すると「エラー 定数、固定長文字列、配列、ユーザー定義型および Declare ステートメントは、オブジェクト モジュールのパブリック メンバーとしては使用できません。」が発生します。