お世話になります。
ExcelVBAで次のようなクラスモジュールがあるとします。
Private lngX As Long
Public Property Let setX(ByVal lngX As Long)
Debug.Print lngX
End Property
ここで、3行目のlongXはローカル変数としてのlngXが参照されていますよね。このプロシージャの中で、ローカル変数と同名のインスタンス変数を参照するにはどのようにすればよいのでしょうか。
Javaでは this.lngX、VB.NETでは Me.lngX とすればよいと思うのですが、VBAにはこのような識別子は用意されていないのでしょうか。当方の環境はExcelVBAですが、VB6でもおなじだと思いますのでそちらではどうなっているかでもかまいません。
宜しくお願い致します。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
こんにちは。
#4 です。>lngX = myX
>でも用は足りるのですが、もしも
>Me.lngX = lngX
>というコードが許されるのであれば、
>その方が(少なくとも私にとっては)可読性が高くなりますので、そのようなコードにしようかな、と。
釈迦に説法かもしれませんが、それは、外部から内容を読めないように隠してあるのですね。
わざわざ、
Private lngX As Long
としている所以です。そうでなければ、Public にします。しかし、こういうのって、VBAに関してのみに限定すると、私は使ってはいますが、何か形だけの話のような気がします。
No.4
- 回答日時:
こんばんは。
たとえば、VB6/VBA とVB.Net では、Class の扱い方がまったく違いますから、Me.lngX などという使い方は皆無に近いというよりも、出来るけれども、意味がありません。
VBAでは、通常、以下のような書き方をします。ただし、クラスモジュール内変数-lngX は、Private にするのが正しい使い方です。ただ、VBAで、具体的にどのような仕事をさせるか分かると、また別の方向に話がいくと思いますが、VBAでは、こうした使い方は、めったに出てきません。
------------------------------------------
'Class1 モジュール
Private lngX As Long
Public Property Let X(ByVal myX As Long)
lngX = myX
Debug.Print lngX
End Property
------------------------------------------
'標準モジュール
Dim myClass As Class1
Sub Test1()
Set myClass = New Class1
myClass.X = 10
End Sub
この回答への補足
どうもありがとうございます。
> 具体的にどのような仕事をさせるか分かると、また別の方向に話がいくと思いますが、
JavaBeanのようなデータモデルを表すクラスのセッタ、ゲッタ内での利用を想定しています。
引用していらっしゃるクラスモジュールのように、これまでインスタンス変数とローカル変数のプレフィックスを変えることで対応してきましたが、ひょっとしたらVBAにも識別子があるのでは・・・と思って質問致しました。
lngX = myX
でも用は足りるのですが、もしも
Me.lngX = lngX
というコードが許されるのであれば、その方が(少なくとも私にとっては)可読性が高くなりますので、そのようなコードにしようかな、と。
No.3
- 回答日時:
色々やってみたら、
lngXのClass内での宣言を、publicとすると、
Property内からMe.lngXでインスタンス変数を参照できました。
この場合、Moduleからも、obj.lngXで参照可能となってしまいますが・・・
仕様なんでしょうが、Meの参照範囲のバグっぽいですね
No.1
- 回答日時:
多分できないと思いますよ。
ExcelVBAやVB6での「Private」の扱いが、VB.NETとかとは違いますから・・・
VB.NETとかでは、同一クラスなら、別のインスタンスのPrivate属性の変数を参照可能ですよね?
しかし、VBAやVB6では、クラスが同一かどうかに関らず別のインスタンスのPrivate属性の変数は参照できません。
#Private属性は、「自分自身のインスタンスからしか参照できない」と言う制限になっています。
その制限を実現するために、「インスタンスを指定してPrivate変数を参照する」事自体できなくなってしまっています。
別の名前にするしかないと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
オブジェクト参照がオブジェク...
-
生成したインスタンスを削除す...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
C# インスタンスの破棄
-
フォームの存在をチェックする方法
-
C# クラスの代入について
-
複数の変数を宣言する時、同時...
-
javaのクラスの作り方、エラー...
-
C#でオブジェクトの有無を取得する
-
文字列を日付に変換でParseExce...
-
ASPX(C#)で別ファイルで自分で...
-
他のファイルの変数参照
-
「インスタンス」の意味をわか...
-
変数の参照でエラーが出てしま...
-
objective-cで分かりにくい所教...
-
SetWindowsHookExで質問
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
C#において、同じインスタンス...
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
「インスタンス」の意味をわか...
-
C# インスタンスの破棄
-
生成したインスタンスを削除す...
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
文字列を日付に変換でParseExce...
-
他のファイルの変数参照
-
エクセル(複数インスタンス)...
-
VB6.0で、DLLを動的に参照したい
-
Form1上にあるTextBox1を Modul...
-
[Visual C#] 優先される処理に...
-
ASPX(C#)で別ファイルで自分で...
-
SQLを連続発行する時の正しい(?...
おすすめ情報