回答編集履歴

1

追記

2020/09/17 17:40

投稿

hatena19
hatena19

スコア33768

test CHANGED
@@ -67,3 +67,125 @@
67
67
  End Sub
68
68
 
69
69
  ```
70
+
71
+
72
+
73
+ 追記
74
+
75
+ ---
76
+
77
+ 上記の修正だけではうまく動作しませんでした。
78
+
79
+ いろいろ試してみた結果、
80
+
81
+ チェックボックスの生成と、クラスの登録を別に実行するとうまくいくようです。
82
+
83
+
84
+
85
+ `Private Sub CommandButton2_Click()`
86
+
87
+ の最後の、
88
+
89
+ `Call clsLinked`
90
+
91
+ を削除して、
92
+
93
+ コマンドボタンをシート上に追加して(CommandButton3)、そのクリック時で、clsLinked を実行するとうまくいきました。
94
+
95
+
96
+
97
+ また、
98
+
99
+ `Public chBc As Long`のパブリック変数を参照する方法は不安定なので、clsLinked内で件数を取得する方法に変更しました。
100
+
101
+
102
+
103
+ ```vba
104
+
105
+ Private Sub CommandButton3_Click()
106
+
107
+ Call clsLinked
108
+
109
+ End Sub
110
+
111
+
112
+
113
+ Public Sub clsLinked()
114
+
115
+ Dim i As Long
116
+
117
+ Dim chk As clsLinkedCheckBoxes 'ここでクラス変数を宣言、生成はしない
118
+
119
+ Dim ChkCount As Long
120
+
121
+
122
+
123
+ Set myChbes = Nothing
124
+
125
+ Set myChbes = New Collection
126
+
127
+
128
+
129
+ ChkCount = (Range("A4").End(xlDown).Row - 4) * (Cells(1, Columns.Count).End(xlToLeft).Column \ 2)
130
+
131
+
132
+
133
+ With ActiveSheet
134
+
135
+ For i = 1 To ChkCount
136
+
137
+ Set chk = New clsLinkedCheckBoxes 'ここでクラスの実体を生成してクラス変数に格納
138
+
139
+ chk.SetCtrl .OLEObjects("CheckBox" & i + ChkCount).Object, _
140
+
141
+ .OLEObjects("CheckBox" & i).Object
142
+
143
+ myChbes.Add chk
144
+
145
+ Next
146
+
147
+ End With
148
+
149
+
150
+
151
+ MsgBox "終了"
152
+
153
+ End Sub
154
+
155
+ ```
156
+
157
+
158
+
159
+ もし、1回ボタンをクリックするだけで、生成から、クラスの登録までしたい場合は、
160
+
161
+ Application.OnTime で clsLinked をタイマー実行するとうまくいきました。
162
+
163
+
164
+
165
+ OnTime は標準モジュールのプロシージャしか呼び出せないので、
166
+
167
+ `clsLinked`プロシージャと `Dim myChbes As Collection`宣言を標準モジュールに移動させて、
168
+
169
+ `CommandButton2_Click()` の最後で、下記のように記述すればうまくいきます。
170
+
171
+
172
+
173
+ ```vba
174
+
175
+ '前略
176
+
177
+
178
+
179
+ ' Call clsLinked これは削除
180
+
181
+ Application.OnTime Now + TimeValue("00:00:01"), Procedure:="clsLinked"
182
+
183
+
184
+
185
+ End Sub
186
+
187
+ ```
188
+
189
+
190
+
191
+ ユーザーフォームではこんな苦労することはないのですが、シート上のコントロールは扱いが難しいようです。