Excel VBA質問箱 IV

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

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


5511 / 13646 ツリー ←次へ | 前へ→

【50357】クラス変数(?)の作り方 りった 07/7/20(金) 20:25 質問[未読]
【50359】Re:クラス変数(?)の作り方 neptune 07/7/20(金) 21:28 回答[未読]
【50363】Re:クラス変数(?)の作り方 ichinose 07/7/20(金) 23:44 発言[未読]
【50378】Re:クラス変数(?)の作り方 りった 07/7/23(月) 8:52 お礼[未読]
【50386】Re:クラス変数(?)の作り方 neptune 07/7/23(月) 11:16 発言[未読]
【50387】Re:クラス変数(?)の作り方 りった 07/7/23(月) 11:36 お礼[未読]
【50388】Re:クラス変数(?)の作り方 neptune 07/7/23(月) 11:49 発言[未読]

【50357】クラス変数(?)の作り方
質問  りった  - 07/7/20(金) 20:25 -

引用なし
パスワード
   Privateで宣言してもオブジェクト毎に変数が作られました。
クラスで共通の変数は作れますか?

' クラスモジュール
Private pri As Integer
Public Sub setpri(ByVal a As Integer)
 pri = a
End Sub
Public Function getpri() As Integer
 getpri = pri
End Function

' 標準モジュール
Sub main()
  Dim c1 As New Class1
  Dim c2 As New Class1
  Dim i As Integer
  
  c1.setpri (1)
  c2.setpri (2)
  i = c1.getpri ' iは1でした
End Sub

ちなみに下記はエラーでした
Static pri As Integer

【50359】Re:クラス変数(?)の作り方
回答  neptune  - 07/7/20(金) 21:28 -

引用なし
パスワード
   ▼りった さん:
>Privateで宣言してもオブジェクト毎に変数が作られました。
>クラスで共通の変数は作れますか?
共通のClassを用意するしか思い浮かびませんでした。

最悪としては標準モジュールに広域変数を用意して共通の変数にするとか
も浮かびましたけどさすがにそれは出来ませんね。
'////////////標準モジュール//////////////
Sub main()
Dim cls1 As New Class1
Dim cls2 As New Class1
Dim clsData As New Class2

  Set cls1.SetCommonCls = clsData
  Set cls2.SetCommonCls = clsData
  
  cls1.SetData = 1
  cls2.SetData = 2
  
  Debug.Print cls1.GetData
  
End Sub

'///////////Class1///////////////
Private mcls As Class2

Public Property Set SetCommonCls(pData As Class2)
  Set mcls = pData
End Property
Public Property Let SetData(pData As Long)
  mcls.SetData = pData
End Property
Public Property Get GetData() As Long
  GetData = mcls.GetData
End Property

'//////////////Class2///////////////
Private mData As Long

Public Property Let SetData(pData As Long)
  mData = pData
End Property
Public Property Get GetData() As Long
  GetData = mData
End Property

【50363】Re:クラス変数(?)の作り方
発言  ichinose  - 07/7/20(金) 23:44 -

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

>Privateで宣言してもオブジェクト毎に変数が作られました。
>クラスで共通の変数は作れますか?
>
>' クラスモジュール
>Private pri As Integer
>Public Sub setpri(ByVal a As Integer)
> pri = a
>End Sub
>Public Function getpri() As Integer
> getpri = pri
>End Function
>
>' 標準モジュール
>Sub main()
>  Dim c1 As New Class1
>  Dim c2 As New Class1
>  Dim i As Integer
>  
>  c1.setpri (1)
>  c2.setpri (2)
>  i = c1.getpri ' iは1でした
>End Sub
>
>ちなみに下記はエラーでした
>Static pri As Integer


はっきり意味(何をしたいのか)わかりませんが、

Implementsステートメントのことでしょうか?

上記のステートメントを一度Helpで調べてみてください。

【50378】Re:クラス変数(?)の作り方
お礼  りった  - 07/7/23(月) 8:52 -

引用なし
パスワード
   回答ありがとうございます。
おうちでネットつないでないので今朝回答見ました。

>はっきり意味(何をしたいのか)わかりませんが、

バグ表テーブルの列番号の取得(タイトルの文言で検索)をバグ表レコードクラス生成のつどやるのではなく、1回だけやりたいです。

バグ番号 発見者 ・・・ ランク ・・・ ←☆
BUG0001  織田信長   A
BUG0002  徳川家康   B
BUG0003  明智光秀   C

☆を"ランク"で検索し列番号を確保しておく。

>Implementsステートメントのことでしょうか?
>
>上記のステートメントを一度Helpで調べてみてください。

Implementsでは出来なさそうですが、勉強にはなりました。
派生クラス作れるんですね。大発見(only for me?)です。

とりあえず今回自分が作っているものに関しては標準モジュールにグローバル作戦(最悪?)で行こうかと思います。

【50386】Re:クラス変数(?)の作り方
発言  neptune  - 07/7/23(月) 11:16 -

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

>Implementsでは出来なさそうですが、勉強にはなりました。
>派生クラス作れるんですね。大発見(only for me?)です。
私も使ったことなかったのでよ〜く見てみました。
で、Enmuのスレッド立ててましたよね。

例えば、
'//Class2////
public enum e_arg
 a
 b
 c
end enum

'//////Class1////////
Implements Class2

public function hoge(arg as e_arg)
end function
'//////////////
等としてやれば、複数のクラスでe_argを使いまわせそうです。
継承って言う奴ですかね。

>とりあえず今回自分が作っているものに関しては標準モジュールにグローバル作戦(最悪?)で行こうかと思います。
これですが、標準モジュールで広域変数を使用するならVBには
ユーザー定義型(構造体のような物)というレコード格納用に使用できる
便利なものがあります。
これを使ったほうが、レコード管理しやすいのでは?

クラスを使うというので、回りに対して遮蔽、独立性等を求めてるのかと
思っていましたが、そうでもなさそう(多言語での構造をVBに持ち込み?)
なので、
>グローバル作戦(最悪?)
でもないかも知れませんね。
public type recordData
 a as string
 b as long
 c as byte
end type

【50387】Re:クラス変数(?)の作り方
お礼  りった  - 07/7/23(月) 11:36 -

引用なし
パスワード
   回答ありがとうございます

>等としてやれば、複数のクラスでe_argを使いまわせそうです。
>継承って言う奴ですかね。

使いまわせはするのですが、
〜 = e_arg.〜
とは書けないようです。

>>とりあえず今回自分が作っているものに関しては標準モジュールにグローバル作戦(最悪?)で行こうかと思います。
>これですが、標準モジュールで広域変数を使用するならVBには
>ユーザー定義型(構造体のような物)というレコード格納用に使用できる
>便利なものがあります。
>これを使ったほうが、レコード管理しやすいのでは?

すみません。表現が大雑把でした。
Classモジュールに構造体の型定義をして標準モジュールで実態定義する考えでいました。
実態定義の1行ぐらいだったら、今後の変更も無いだろうしということで妥協です。

>クラスを使うというので、回りに対して遮蔽、独立性等を求めてるのかと
>思っていましたが、そうでもなさそう(多言語での構造をVBに持ち込み?)

独立性等を求めていますよ。大分出来てきたので、詳細は近々別スレにプログラム載せます。

【50388】Re:クラス変数(?)の作り方
発言  neptune  - 07/7/23(月) 11:49 -

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

>使いまわせはするのですが、
>〜 = e_arg.〜
>とは書けないようです。
これじゃだめなんですね?
  Dim cls1 As New Class1
  Dim cls2 As New Class1
  これは = を入力すればインテリジェンスで入力候補がでますね。
  cls1.SetData = eInit
  cls2.SetData = eStart

確かに
cls1.SetData = e_arg.eInit
とは書けません。

>独立性等を求めていますよ。大分出来てきたので、詳細は近々別スレにプログラム載せます。
楽しみにしてます。

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