失礼します
Excel VBA のクラスについて調べていたらこのサイトを見つかって読んでいたのですが
はてなID t-hom さん
http://thom.hateblo.jp/entry/2016/12/31/013555
言語
Excel VBA
プログラム内容
初期設定値30の値をメッセージボックスに表示して
その値を1づつ三回加算して
メッセージボックスに結果を表示する
コード
値を設定するためのアクセサを作成する
ここでやっぱりカウンターの値を外から代入できるようにしたいという要望が発生したとしよう。ただし設定できる値は1から100の間に制限したいとする。
そこで値を設定するため、LetValueという名前でアクセサを作成した。
引数を渡すと、1から100の範囲ならValueに設定し、それ以外ならエラーを発生させるプロシージャである。
クラス Counter
Private Value As Long
Sub Up()
Value = Value + 1
End Sub
Function GetValue() As Long
GetValue = Value
End Function
Sub LetValue(n As Long)
If n >= 1 And n <= 100 Then
Value = n
Else
Err.Raise vbObjectError, "Counter", "その値は設定できません。"
End If
End Sub
Private Sub Class_Initialize()
Value = 1
End Sub
このようにアクセサにチェック機能を持たせることで、不正な値でデータを壊すことなく、外部から安全にValueを設定することができる。
CountUpSampleは次のようにLetValueアクセサで30を設定するように書き換えたみた。
Sub CountUpSample()
Dim c As Counter
Set c = New Counter
c.LetValue 30 '----------------------この部分(質問者の追加コメント)
MsgBox c.GetValue
c.Up
c.Up
c.Up
MsgBox c.GetValue
End Sub
たとえば1000などの値に変えて実行してみるとちゃんとエラーが出るのが分かる。
このような内容だったのですが、コードを読んでいくうちに、メインコードの
c.LetValue 30 ではてなと止まってしまいました。
このアクサ、引数 30 が括弧で閉じられていないぞ・・・・
VBE にコピペしてみても動く
ではと
c.LetValue (30)
に書き換えてみてもやっぱり動く
さてと思い調べてみると戻り値が返ってこない場合は引数を括弧で閉じないとのこと
http://officetanaka.net/excel/vba/beginner/07.htm
この場合
c.LetValue 30
は、クラス内で処理して戻り値がありませんから括弧がなくて正解!!
c.LetValue 30 ・・・◎
c.LetValue (30) ・・・×
なるほど・・・・と思ったのですが・・・
となると・・・自分が修正した引数を括弧で閉じたコードでも動くのがわからなくなってしまいました。
本来なら、サイトの立ち上げ者に質問すべきなのでしょうが、コメント欄がないのでそれはできないようです。
理由を教えていただけませんか?
失礼しました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/11 03:57