Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


31627 / 76734 ←次へ | 前へ→

【50354】Re:Class毎にenumを管理したい
発言  neptune  - 07/7/20(金) 18:01 -

引用なし
パスワード
   ▼りった さん:
こんにちは

>しかしながら、
>誤:o.F_action (o.eAct.eInit)
>誤:o.F_action (Class1.eAct.eInit)
>正:o.F_action (Class1.eAct.eInit)
>のようですので、eInitの部分をプログラム全体でユニークにつける必要があり
>いまいちすっきりしなさそうです。VBAの限界ですかね。
Public Enum eAct
の宣言ですね。別のClassでも使いたいと、でも使えない。。。
これは仕様ですからね。限界といえば限界なんですかね?

>何も返さない場合はどのように書くのでしょうか?
このあたりは人によって違うでしょうが、私の場合を書くと
「何も返さない場合もある。」
というなら必ず何かを返すようにしてます。処理の成功をbooleanで返すとか。
Public Function F_action(ByVal arg As eAct) As Variant

「何も返さない」
のなら、Funcitonではなく、sub として記述します。
Public sub F_action(ByVal arg As eAct)

私はこんな感じで使う事が多いです。
'//////////////Classモジュール。Class1////////
Public Enum eAct
 eInit
 eStart
 eStop
 ePause
 eRestart
End Enum

Public Function F_action(ByVal arg As eAct) As Variant
'処理
  MsgBox "引数は:" & arg
  F_action = arg * 2
End Function

'////////////標準モジュール/////////////
'広範囲で使うことが多いのでモジュールレベルの
'スコープを持たせることが多い。
Private cls As Class1

Sub test()
Dim ret As Long
  'インスタンス作成
  Set cls = New Class1
  '/////////何も返さない場合/////////
  cls.F_action eInit
'  '又は
'  Call cls.F_action(eInit)
  '/////////返す場合//////////////////
  ret = cls.F_action(eInit)
  MsgBox "戻ってきたのは" & ret
  '開放
  Set cls = Nothing
End Sub

3 hits

【50323】Class毎にenumを管理したい りった 07/7/19(木) 16:24 質問
【50325】Re:Class毎にenumを管理したい neptune 07/7/19(木) 17:39 回答
【50353】Re:Class毎にenumを管理したい りった 07/7/20(金) 17:17 質問
【50354】Re:Class毎にenumを管理したい neptune 07/7/20(金) 18:01 発言
【50355】Re:Class毎にenumを管理したい りった 07/7/20(金) 18:20 お礼

31627 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free