• ベストアンサー

ExcelVBAでUserFormのカウント

kkkkkmの回答

  • kkkkkm
  • ベストアンサー率65% (1638/2486)
回答No.5

なんかごぞごぞやっているうちに削除できました。 ただし、フォームを開いてすぐだとエラーになります。再度実行するかフォームを開く前だと正常に終わります。 Sub Test02() Dim i As Long Dim ct As Control Dim mForm As UserForm With ActiveWorkbook.VBProject For i = 1 To .VBComponents.Count If .VBComponents(i).Type = 3 Then Set mForm = ThisWorkbook.VBProject _ .VBComponents(i).Designer For Each ct In mForm.Controls If TypeName(ct) = "CommandButton" Then If ct.Caption = "TEST" Then mForm.Controls.Remove (ct.name) End If End If Next ct End If Set mForm = Nothing Next i End With End Sub

emaxemax
質問者

お礼

ありがとうございました。

関連するQ&A

  • セルに対してFor Each~In~Nextを使う

    セルに対してFor Each~In~Nextを使う事は出来ない? シートやブックに対してループする時は Sub aaa() Dim w As Worksheet For Each w In Worksheets MsgBox w.Name Next End Sub 等を使いますが、 A1に「あ」 A2に「い」 A3に「う」 が入っている場合、 Sub bbb() Dim i As Long For i = 1 To Range("a65536").End(xlUp).Row MsgBox Cells(i, 1) Next End Sub で、全ての値を取得できますが、 For~to~nextではなく セルに対してFor Each~In~Nextを使う方法があれば教えてください。 上記のように Dim w As Worksheetは宣言できますが Dim c As Workcellとはできませんでした。 なぜわざわざFor~to~nextでできる事をFor Each~In~Nextでやりたいかと言うと、 シートやブックはFor~to~nextでできるのに、セルはFor~to~nextができない理由を知りたいからです。 ご回答よろしくお願いします。

  • VBAのUserFormのイベント

    VBAの公式問題集の練習をしているのですが、分からないことがあるので質問致します。 UserFormのイベントを使ってコードにマクロを作成したのですが、ユーザーフォームの実行を押しても、コンパイルエラーが表示されてしまいます。 具体的なマクロの式ですが、 Option Explicit Private Sub UserForm_Initialize() Dim i As Long TextBox1.Text = "UserFormの初期化" For i = 1 To 5 Listbox1.AddItem "Sample" & i Next i Listbox1.ListIndex = 2 End Sub です。 エラーには、コンパイルエラー: TextBox1が表示され、変数が定義されていませんと出ます。 どのようにしたらいいのでしょうか。 どなたかお分かりになるかたがいらっしゃいましたら教えて下さい。 お願いします。

  • AddItem をクリアしたい

    UserForm1.ListBox1.AddItem をクリアしたいです。 エクセルのユーザーフォームに全てのシート名を追加してるのですが Sub a() Dim s As Worksheet For Each s In Worksheets UserForm1.ListBox1.AddItem s.Name Next End Sub を実行する度に追加されてしまいます。 Sub a() Dim s As Worksheet UserForm1.ListBox1.AddItem Null For Each s In Worksheets UserForm1.ListBox1.AddItem s.Name Next End Sub のように、最初にリセットしてから追加したいのですが どうもNULLだとエラーになるようです どうすればリセットできますか?

  • エクセル2003のVBAで列を指定

    エクセルで特定の列の2~10行目に対して、ある作業をする場合、列を指定する方法は以下のどれがいいでしょうか?あるいはもっといい方法があれば教えてください。 実際には列は約40列(固定)、行は1~2万行(変動)程度で、作業はもっと複雑です。 Sub test01() Dim col Dim i As Long, n As Long For Each col In Array(1, 3, 7, 8, 11) '列番号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test02() Dim col Dim i As Long, n As Long For Each col In Array("A", "C", "G", "H", "K") '列の記号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test03() Dim col Dim i As Long, n As Long For Each col In Range("A2,C2,G2,H2,K2") 'セルで指定 For i = 2 To 10 n = n + 1 col.Offset(i - 2).Value = n Next i Next col End Sub

  • なぜiは変数の値が保持されるのに、wは保持されない

    なぜiは変数の値が保持されるのに、wは保持されないのでしょうか? Sub test() Dim w As Worksheet Dim i As Long i = 1 For Each w In Worksheets i = i + 1 Next MsgBox i MsgBox w.Name End Sub -------------------------------------- を行うと、 MsgBox i は表示されるのに、 MsgBox w.Name は、 「オブジェクト変数または With ブロック変数が設定されていません。」になります。 wはオブジェクト変数だから、 For Each ステートメントを抜けると値が破棄されてしまうのでしょうか? でもvbaのヘルプの 「For Each...Next ステートメントの使い方」 を見ても 「ステートメントを抜けるとオブジェクト変数なら値が破棄されます」 と記載されていません。

  • 動的配列の後始末?

    以下のサブルーチンで、lines()と動的配列を定義して、Splitでデータを入れたのですが、このサブルーチンが終了すると、lines()はデータも含めて解放されるのでしょうか? 極端な話、1億回このサブルーチンを呼ぶと、メモリーリークするのでしょうか? それと、VB6やVB.NETでは、For文・For Each文のどちらを使う方が良いのでしょうか? Sub test() Dim lines() As String lines = Split(Data, vbCrLf, -1, vbBinaryCompare) Dim i As Integer For i = LBound(lines) To UBound(lines) MsgBox ("for=[" & lines(i) & "]") Next i Dim s As Variant For Each s In lines MsgBox ("for each=[" & s & "]") Next End Sub

  • ExcelVBAの知恵をお貸しください。

    一つのシートで、複数のセル範囲を選択している場合に、セル範囲を選択しているのか?列、行を選択しているのかを判別する方法として次のようなのを考えました。 それとなく動いているのですが、なんとなくスマートでなく、場当たり的な感じがしますが、どのようにすればいいのか判りません!! どなたか、アドバイス頂けないでしょうか?宜しくお願いいたします。 Sub test()  Dim myRang As Range  Dim myArry As Variant  For Each myRang In Selection.Areas myArry = Split(Replace(myRang.Address, ":", ""), "$") If UBound(myArry) <> 2 Then   MsgBox "セル範囲を選択しています。" & myRang.Address Else If IsNumeric(myArry(1)) Then MsgBox "行を選択しています。" & myRang.Address Else MsgBox "列を選択しています。" & myRang.Address End If End If  Next End Sub

  • フォーム1が開いているのならMsgBoxを表示

    Sub マクロ() If フォーム1が開いているのなら Then MsgBox "フォーム1は開いています" End If End Sub アクセスで上記の事をやりたいのですが、コードを教えていただけますか? Sub test() Dim myForm As Form For Each myForm In Forms Debug.Print myForm.Name Next End Sub で、フォームをループできるのですが、いちいちループさせずに、フォーム1だけをつかんで、 起動している(開いている)ならメッセージボックスを表示させたいです。

  • VBAでコントロールの数をカウント。結果が違う

    Access 2003のフォームについてお教えください。 フォームデザインビューで、「Form1」にテキストボックスが1つ配置されています。 レコードソースは連結されているので、フォームビューで見ると現在10のテキストボックスが フォームには表示されています。 やりたい事 フォームビューで見た時のコントロールの数をカウントしたい。ここでは、「10」という 結果が欲しいです。 そこで下記のコードを書き実行しましたが、「1」としか表示されません。 デザインビューで見ると、テキストボックスの数は1なので、それが表示 されている感じがします。 フォームビューで見た時のコントロールの数を数えるにはどのようにしたらよいでしょうか? Private Sub Form_Load() Dim ctl As Control Dim counter As Integer On Error Resume Next counter = 0 For Each ctl In Me.Controls 'コントロールがチェックボックスか判別 If TypeOf ctl Is TextBox Then counter = counter + 1 End If Next ctl msgbox counter End Sub

  • VBAで文字列のカウントがうまくいかない・・・です

    Dim cnt As Long Dim i As Long Dim lastRow As Long For i = 1 to 20 step 2 lastRow = Cells(65536, i).End(xlUP).Row cnt = WorksheetFunction.CountIf(ActiveSheet.Range(Cells(10, i),Cells(lastRow, i), "お世話になっております")cnt = cnt + cnt Next Excelのセルを1列ずつ飛ばして列に「お世話になっております」が含まれたら件数をカウントしています。 そのカウント数が何故かリセットされてしまいます。 カウント数を足していきたいのですが・・・考え方自体が違うのでしょうか?