teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

説明追加

2020/10/29 04:41

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -29,4 +29,12 @@
29
29
  Private Sub Form_Close()
30
30
  Set Temporary = NoThing 'クラスのインスタンスの解放
31
31
  End Sub
32
- ```
32
+ ```
33
+
34
+ ---
35
+ 回答してから質問見直したら、コードが修正されてますね。
36
+ 最初のコードはフォームモジュールのコードのようでしたが、今度は標準モジュールでのコードになってます。
37
+ 記述する場所によって話はまったく違ってきます。
38
+ 標準モジュールで、クラスをモジュールレベル変数で宣言するのは一般的にはあまりよい使い方ではないです。
39
+ 実際、どのような目的で使用するのか不明なので、明確なアドバイスは難しいですが、
40
+ まずは、`New`の意味を理解してから、やりたいことを整理して、コードを書きなおしてください。

1

説明追加

2020/10/29 04:41

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -13,4 +13,20 @@
13
13
  ```
14
14
 
15
15
  `New`でクラスのインスタンスを**新規に作成**して、変数に代入したら、新規のクラスで上書きされてしまうので、前に代入したデータは消えてしまうのは当然です。
16
- 上記の `Set classTemporary = New classTemporary`の行を削除してください。
16
+ 上記の `Set classTemporary = New classTemporary`の行を削除してください。
17
+
18
+ ---
19
+ クラスモジュールのコードが提示されていないし、全体で何をしたいのか不明ですが、一つのクラスのインスタンスをフォーム内で使いまわしたいのなら、フォームを開くときに New でインスタンスを生成して、フォームを閉じるときに解放するようしましょう。(解放は自動でされるのでなくてもいいのですが。)
20
+ 関数内で使うたびに Newして変数に上書きしていたら、そのたびに設定値はリセットされます。
21
+
22
+ ```vba
23
+ Dim Temporary As classTemporary '変数名とクラス名は別にする
24
+
25
+ Private Sub Form_Open(Cancel As Integer)
26
+ Set Temporary = New classTemporary 'クラスのインスタンスの生成
27
+ End Sub
28
+
29
+ Private Sub Form_Close()
30
+ Set Temporary = NoThing 'クラスのインスタンスの解放
31
+ End Sub
32
+ ```