[リストへもどる]
一括表示

投稿時間:2004/01/17(Sat) 16:01
投稿者名:おじん
URL :
タイトル:
クラスモジュールの変数について
一つのクラスモジュールを2度定義して使おうとしています。この場合、
クラスで定義されている変数が共有されてしまします。別々に使用する
方法はありませんか。
下記のようなテストをしたところ、クラスのaという変数がaSub,bSub
両方で加算されてしまいます。aSubのaとbSubのaを別物として処理した
いのです。

フォームで、
Option Explicit
Dim aSub As New addClass
Dim bSub As New addClass

Private Sub Command1_Click()
Dim b1 As Long
aSub.add 1&
b1 = aSub.aValue
Text1 = b1
End Sub

Private Sub Command2_Click()
Dim b2 As Long
aSub.add 2&
b2 = aSub.aValue
Text2 = b2
End Sub

クラスで、
Option Explicit
    Dim a As Long

Public Property Get aValue() As Long
    aValue = a
End Property

Public Sub add(aV As Long)
    a = a + aV
End Sub

またまた、説明がうまくできたかどうか不安です。ご理解できましたら
よろしくお願いいたします。

投稿時間:2004/01/17(Sat) 19:04
投稿者名:Say
Eメール:
URL :
タイトル:
Re: クラスモジュールの変数について
> 下記のようなテストをしたところ、クラスのaという変数がaSub,bSub
> 両方で加算されてしまいます。aSubのaとbSubのaを別物として処理した
> いのです。
で、bSubはどこで使っているのでしょう?

投稿時間:2004/01/17(Sat) 19:17
投稿者名:おじん
URL :
タイトル:
Re^2: クラスモジュールの変数について
> > 下記のようなテストをしたところ、クラスのaという変数がaSub,bSub
> > 両方で加算されてしまいます。aSubのaとbSubのaを別物として処理した
> > いのです。
> で、bSubはどこで使っているのでしょう?
またやってしまいました。ミスパンチです。他にもミスが、、、
Command2_Click()です。

Private Sub Command2_Click()
Dim b2 As Long
bSub.add 2&
b2 = bSub.aValue
Text2 = b2
End Sub

よろしくお願いいたします。

投稿時間:2004/01/18(Sun) 15:05
投稿者名:Say
Eメール:
URL :
タイトル:
Re^3: クラスモジュールの変数について
記載のコードをそのまま実行すると
Command1を押すたびにText1が1ずつ加算され、
Command2を押すたびにText2が2ずつ加算されますが、
どのような結果を期待されているのでしょうか?

投稿時間:2004/01/18(Sun) 17:34
投稿者名:おじん
URL :
タイトル:
Re^4: クラスモジュールの変数について
> どのような結果を期待されているのでしょうか?
ありがとうございます。
別々に計算する。例えば、
Command1を押しつづけると、1,2,3,,,となり、
Command2をおしつづけると、2,4,6,,,となるように。
今は、Command1と押すと、1に、続けてCommand2を押すと、2
加算されて、3になります。すなわち、クラス内で定義している
ワークaがどちらにも作用しているのです。
これを「別々に」作用させるにはどうしたら良いか、その方法を
知りたいのです。

投稿時間:2004/01/18(Sun) 17:52
投稿者名:よねKEN
Eメール:
URL :
タイトル:
Re^5: クラスモジュールの変数について
> Command1を押しつづけると、1,2,3,,,となり、
> Command2をおしつづけると、2,4,6,,,となるように。

提示のコードならそのようになります。
最初の投稿(No.7534)で提示されたコードとその次の投稿(NO.7540)の情報を
加味したソースコードを実際に動かしても期待する通りの結果になりました。

> 今は、Command1と押すと、1に、続けてCommand2を押すと、2
> 加算されて、3になります。すなわち、クラス内で定義している
> ワークaがどちらにも作用しているのです。

最初の投稿のソースコードって実際に問題の発生しているソースコードではないですよね?
(投稿する画面でソースコードをタイピングするのではなく、VBの開発環境のエディタから
コピー&ペーストで貼り付けてください。)

ソースコードが長い場合は、今回の現象が再現できる必要最小限のソースコードを用意して下さい。

投稿時間:2004/01/18(Sun) 18:38
投稿者名:おじん
URL :
タイトル:
Re^6: 解決。申し訳ありません
Sayさま、よねKENさま、申し訳ありませんでした。
投稿のコードは修正したのですが、自前のコードはそのままで
一生懸命、悶々としていました。今後、このことにも気をつけます。
ご迷惑をおかけしました。ありがとうございました。