Excel VBA質問箱 IV

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

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


1101 / 13645 ツリー ←次へ | 前へ→

【76322】できません。 追加 14/10/30(木) 13:52 質問[未読]
【76328】Re:できません。 ichinose 14/10/31(金) 0:05 発言[未読]

【76322】できません。
質問  追加  - 14/10/30(木) 13:52 -

引用なし
パスワード
         Dim ccc As Control, jjj As Control

       For Each ccc In Controls
        If ccc.name = "Frame_tmp" Then
        
          For Each jjj In ccc.Controls
            Debug.Print jjj.name
            

            'Controls.Remove (jjj.name)
          Next jjj
          
         Exit For '見つかったのでout
        End If
       Next ccc

デバッグしたら以下のように出てきます。

CheckBox0
CheckBox1
CheckBox2
CheckBox3
TextBox3
SpinButton3
Label3
CheckBox16

'コメントをのけて走らせるとエラーになります。
なぜ?

【76328】Re:できません。
発言  ichinose  - 14/10/31(金) 0:05 -

引用なし
パスワード
   ▼追加 さん:

www.vbalab.sakura.ne.jp/vbaqa/c-board.cgi?cmd=ntr;tree=76288;id=excel
同じ方ですか?

どんなエラーメッセージなのかは、記述してください。


新規ブックにて

ユーザーフォームを一つ作成してください(UserForm1)。

このUserForm1には、コントロールは何も配置しないでください。
コントロールは以下に記述するコードにて、配置しますので・・・。


UserForm1のモジュールに、

'=============================================================================
Option Explicit
Private WithEvents cmd1 As msforms.CommandButton
Private WithEvents cmd2 As msforms.CommandButton
Private frm As msforms.Frame
'=============================================================================
Private Sub cmd1_Click()
  With frm.Controls.Add("Forms.CheckBox.1", "chk0")
   .Left = 42
   .Top = 42
   .Width = 120
   .Height = 30
   .Caption = "チェック0"
  End With
  With frm.Controls.Add("Forms.CheckBox.1", "chk1")
   .Left = 174
   .Top = 42
   .Width = 120
   .Height = 30
   .Caption = "チェック1"
  End With
  With frm.Controls.Add("Forms.CheckBox.1", "chk2")
   .Left = 306
   .Top = 42
   .Width = 120
   .Height = 30
   .Caption = "チェック2"
  End With
  With frm.Controls.Add("Forms.Label.1", "lbl1")
   .Left = 36
   .Top = 102
   .Width = 108
   .Height = 24
   .BackColor = &HC0FFFF
   .Caption = "テスト ラベル"
   .SpecialEffect = 2
   .Font.Size = 16
  End With
  With frm.Controls.Add("Forms.TextBox.1", "txt1")
   .Left = 144
   .Top = 102
   .Width = 204
   .Height = 24
   .Font.Size = 14
  End With
End Sub
'=============================================================================
Private Sub cmd2_Click()
  Dim ccc As msforms.Control, jjj As msforms.Control
  For Each ccc In Controls
    If ccc.Name = "Frame_tmp" Then
     For Each jjj In ccc.Controls
       Controls.Remove (jjj.Name)
     Next jjj
     Exit For '見つかったのでout
    End If
  Next ccc
End Sub
'=============================================================================
Private Sub UserForm_Initialize()
  With Me
    .Width = 775
    .Height = 558
    Set cmd1 = .Controls.Add("Forms.CommandButton.1", "CommndButton1")
    With cmd1
     .Left = 12
     .Top = 42
     .Width = 90
     .Height = 42
     .Caption = "コントロール作成"
    End With
    Set cmd2 = .Controls.Add("Forms.CommandButton.1", "CommndButton1")
    With cmd2
     .Left = 108
     .Top = 42
     .Width = 90
     .Height = 42
     .Caption = "コントロール削除"
    End With
    Set frm = .Controls.Add("Forms.Frame.1", "Frame_tmp")
    With frm
     .Left = 12
     .Top = 96
     .Width = 744
     .Height = 432
     .Caption = "コントロール作成アリア"
    End With
  End With
End Sub
'=============================================================================
Private Sub UserForm_Terminate()
  Set cmd1 = Nothing
  Set cmd2 = Nothing
  Set frm = Nothing
End Sub


標準モジュールに

'=======================================================
Option Explicit
Sub test()
  UserForm1.Show
End Sub


コードは、以上です。


testを実行してください。UserForm1が表示されます。


コントロール作成、コントロール削除というコマンドボタン及び、コントロール作成エリア というフレームが表示されているはずです。


「コントロール作成」コマンドボタンをクリックしてください。

コントロール作成エリア内に、三つのチェックボックス(チェック0〜チェック2)、ラベル及び、テキストボックスが作成されます。


次に「コントロール削除」コマンドボタンをクリックしてください。

作成されたコントロールが削除されます。
このコントロール削除ボタンには、追加さんが投稿されたコードをそのまま使っています(cmd2_Click)。


どこが違うのか考察してみてください。

尚、
Removeメソッドは、VBEにて事前に作成したコントロールは、削除できません。

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