| 
    
     |  | >でも、使った方が楽ということもありますので、ケースバイケース。 モジュールレベルの変数を否定している訳ではありません。
 そんなこと言ったらクラスを否定しなければなりません。
 
 標準モジュールのPublic変数を作らないほうが良い と言っています。
 
 
 >
 >こちらの xl2010,xl2013 で、ボタンクリックを、5回ずつ実行。
 >1回あたり100個のチェックボックスを生成していて、だんだん遅くはなるんですが
 >エラーにはならず、それぞれ、500個のチェックボックスが作られました。
 >
 これに関しては、私の認識不足がありました。作成するActiveXControlが
 アクティブシートでなければ、変数が初期化されませんでした。
 
 
 こんな手順で初期化が再現されました。
 
 
 新規ブック(Sheet1 Sheet2 というシートが存在する)にて、
 Sheet1にActiveXControlのコマンドボタンを二つ配置してください。
 (CommandButton1 CommandButton2)。
 
 標準モジュールに 私が否定しているPublic変数の宣言
 
 Option Explicit
 Public Wb As Workbook        'ワークブック
 Public Ws1 As Worksheet       'ワークシート
 Public Ws2 As Worksheet       'ワークシート
 
 
 ThisworkBookのモジュールに
 
 Option Explicit
 Private Sub Workbook_Open()
 Set Wb = Me
 Set Ws1 = Wb.Worksheets("Sheet1")
 Set Ws2 = Wb.Worksheets("Sheet2")
 End Sub
 
 
 Sheet1のモジュールに
 
 
 Option Explicit
 Private Sub CommandButton1_Click()
 Dim x As Long
 Dim xx As Long
 xx = 5
 For x = 1 To xx
 'チェックボックスを作成する
 With Ws2.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False)
 End With
 Next x
 End Sub
 Private Sub CommandButton2_Click()
 Dim tctrl As Object
 For Each tctrl In Ws2.Shapes
 If Left(tctrl.Name, 8) = "CheckBox" Then
 Ws2.Shapes(tctrl.Name).Delete
 End If
 Next
 End Sub
 
 と殆ど ぴょんさんが提示されたコードと同じですが、同期がとれるように
 再度、記述しておきます。
 
 Sheet2のシートをアクティブにして セルA1を選択してください。
 Sheet1のシートをアクティブにしてください。
 
 これを 適当な場所に 変数初期化1.xlsm という名前で保存してください。
 
 
 一度、このブックを閉じたのち、再度開いてください。
 
 
 1 Commandbutton2をクリックしてください。
 2 Commandbutton1をクリックしてください。
 Sheet2にチェックボックスが作成されます。
 
 3 Sheet2をアクティブにしてください。
 4 チェックボックスが作成されている事を確認し、この状態で上書き保存を行ってください。
 
 5 保存後に Sheet1をアクティブにしてください。
 
 この1〜5を繰り返してください。何度目かの2で
 実行時エラー:91 オブジェクト変数またはWithブロック変数が設定されていません
 
 が発生しました(殆ど2回目の2で発生します)。
 
 
 |  |