• ベストアンサー

シート上のコントロール(TextBoxのみ)のカウント

お世話になります。 現在Excel2003 VBAでファイル生成プログラムを書いております。 処理の一部で、シート上に配置されたコントロール(TextBoxのみ)の総数を取得したいのですが、どのようにすればよろしいでしょうか。 テキストのみに限らない場合は、 OLEObjects.Countで取得できます。 For i = 1 To Sheet1.OLEObjects.Count 省略 Next i 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

http://msdn.microsoft.com/en-us/library/bb237228.aspx コレ見る限り、多分 Sub hoge() Dim i As Integer For i = 1 To ActiveSheet.OLEObjects.Count If ActiveSheet.OLEObjects(i).progID = "Forms.TextBox.1" Then MsgBox ("テキストボックス見つかったよ") End If Next i End Sub という感じでprogIDプロパティを見るんだろうけど, Forms.TextBox.1だけなのかは自信がない 僕は持ってないけどひょっとしたら他の人は Forms.TextBox.2とかForms.TextBoxとかいうのが登録されているかもしれない。

xYAMATOx
質問者

補足

himajin100000様 回答ありがとうございます。 progIDというのがあるんですね、初めて知りました…。 勉強させていただきます!

その他の回答 (1)

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.2

シート上のコントロールのProgIdをワイルド検索し、 Forms.TextBoxを含むコントロールをテキストボックスと 判断し、カウントアップする。 Dim obj As Object Dim txtCnt As Integer txtCnt = 0 For Each obj In ActiveSheet.DrawingObjects If obj.ProgId Like "Forms.TextBox*" Then txtCnt = txtCnt + 1 End If Next

xYAMATOx
質問者

補足

Hardking様 回答ありがとうございます。 himajin100000への回答にも書きましたが、 progIDというのがあるのを初めてしりました。 無事に値を取得できました。 ありがとうございました!

関連するQ&A

  • シート上のOLEオブジェクトのタイプを取得する

    シート上のOLEオブジェクトのタイプを取得するvbaは? Sub Sample() Dim i As Integer For i = 1 To ActiveSheet.OLEObjects.Count Debug.Print ActiveSheet.OLEObjects(i).Type Next i End Sub これだとエラーになります。 テキストボックスとかコマンドボタンとかの情報を取得するには どうすればいいでしょうか?

  • Excelシートのコントロールをプログラムから削除したい

    Excel2003を使用しています。 シート上にテキストボックスがいくつか配置されています。 そのコントロールのTextプロパティの値は以下のように取れると思います。 Sub main() Dim aaa As Variant For Each aaa In ActiveSheet.OLEObjects MsgBox (aaa.Object.Text) Next End Sub この場合に、Textが"あいう"だったら、 そのコントロールを削除したいのですが、 どのように削除処理を書いたら良いのかが、分かりませんでした。 何か方法をご存知でしたら、教えてください。 よろしくお願い致します。

  • WordのVBAにてコントロール名に変数を使いたい

    Wordでコントロールツールボックスのコントロールを複数個並べて、コントロール名を変数で切り替えたいと思っています。 例えば、テキストボックスを3つ並べた時、以下のように「i」を変数にしてFor文でまわしたいです。 【例】 TextBox1 TextBox2 TextBox3  ↓ For i=1 to 3 TextBox「i」= ・・・(A) Next i Excelであれば、(A)の部分は、以下のようにOLEObjectsを使えば実現できますが、Wordではコンパイルエラーが出てしまいます。 Dim strName As String For i=1 to 3 strName = "TextBox" & i Me.OLEObjects(strName).Object・・・ next i どのようにすればよいのか、ご教授いただけると幸いです。 お願いします。

  • EXCEL VBAについて、ワークシート上に置いたTextBoxに値を入れる方法について

    すいませんEXCEL VBAについて質問があります。 エクセルのワークシート上にコントロールツールボックスから テキストボックスを2つ、コマンドボタンを1つ設置する。 アクティブになっているテキストボックスに”goo”という値を入れる。 これをVBAで処理するにはどうしたらよろしいのでしょうか。 ユーザーフォームのテキストボックスであれば Private Sub CommandButton1_Click() Dim i As Object Set i = ActiveControl If TypeOf i Is MSForms.TextBox Then i.Text = i.Text & "goo" End If Set i = Nothing End Sub これでできるはずですが、シート上に置くテキストボックスだと うまくいきません。 よろしくお願いいたします。

  • ExcelVBA TextBoxの値を取得できない

    Excel2010です。 2つのUserFormがあり(UserForm1・UserForm2とします)、UserForm1にはTextBox1~100を配置し、UserForm2にもTextBox1~150を配置しています。 それぞれのUserFormにおいて、そのUserForm名を変数に格納しておき、TextBoxの値を取得するコードを別のプロシージャ(「TextBoxチェック」)に書き、それを呼び出してTextBoxの値を格納しようとしましたができませんでした。 該当箇所のコードは以下のとおりです。 Public UFName As String 'UserFormの名前 Sub UserForm1処理() Const Num = 100 UFName = "UserForm1" Call TextBoxチェック(Num) End Sub Sub UserForm2処理() Const Num = 150 UFName = "UserForm2" Call TextBoxチェック(Num) End Sub Sub TextBoxチェック(Num As Integer) Dim i As Integer Dim Con As Control With UserForms.Add(UFName) For i = 1 To Num Set Con = .Controls("TextBox" & i) Debug.Print Con.Name Debug.Print .Controls("TextBox" & i).Value   (その他の処理のコードは省略) Next i End With End Sub 上のコードでは1つ目のDebug.Printの結果(TextBox名)は取得できていますが、2つ目のDebug.Printの結果(TextBoxの値)は空欄になってしまいます。 つまり、 With UserForms.Add(UFName)が、 Set Con = .Controls("TextBox" & i) では反映されているのに、 .Controls("TextBox" & i).Value では反映されていないということだと思います。 また、 Debug.Print .Controls("TextBox" & i).Value を Debug.Print UserForm1.Controls("TextBox" & i).Value とすると、UserForm1の値を取得できます。 また、 With UFName_UF を With UserForm1 にすると、 Debug.Print .Controls("TextBox" & i).Value の値は取得できます。 UserForm1とUserForm2において、TextBoxの値を取得する部分は共通しているため、その部分を別プロシージャにして呼び出して処理したいのですが、うまくいきません。 TextBoxの値を取得できない理由や、対処法が分かれば教えていただきたいです。

  • VBAとVB6.0とC#の速度比較

    ■VBA(Excel2002)でユーザーフォームを追加し、extboxとCommandButtonを1つずつ設置しました。 Buttonを押すと↓が動き出します。 dim i as integer for i= 0 to 10000 TextBox1.text = i next i ■VisuaBasic 6.0 Proでフォーム上にTextboxとCommandButtonを1つずつ設置しました。 EXEファイルを生成し、Buttonを押すと↓が動き出します。 dim i as integer for i= 0 to 10000 TextBox1.text = i next i ■Visual C# 2005 Express Editionで フォーム上にTextboxとCommandButtonを1つずつ設置しました。 EXEファイル生成後、Buttonを押すと↓が動き出します。 for (int i = 0; i <= 10000; i++) textBox1.Text = i.ToString(); 結果、一番速く表示されたのがVBAだったのですが、 一般的に遅いとされるVBAが一番速くなった原因(要因?)は何でしょうか? よろしくお願いします。

  • web上のTextBoxに値を代入したい

    asp.netとVBでwebプログラムを作成しています。 web上にTextbox1~Textbox10を置いて、それぞれに1,2,3,4・・・・10を代入したい場合 Textbox1.text = 1 Textbox2.text = 2 ・ ・ Textbox10.text = 10 と書けば、それぞれに数字が代入され表示されますが、 For i = 1 to 10 Me.controls("Textbox" & cstr(i)).text = i Next と言うような書き方でコンパクトにまとめることは可能なんでしょうか? ちなみに、上記の記述をすると、「.textはSystem.Web.UI.Controlのメンバーでない」旨の エラーになります。 どなたかご教示お願いします。

  • VBAのTextBox表示について質問します。

    実は、MicrosoftのExcel内にありますVBAを使ってシート内に記載られている内容を Userform内にあるTextBoxに表示させたいと考えています。 UserformにあるTextBoxは、シートのセルに対してTextBoxを1個配置させています。 例えば・・・セルA1に入力されている文字をTextBox1に表示 セルB1に入力されている文字をTextBox2に表示 セルC1に入力されている文字をTextBox3に表示 セルD1に入力されている文字をTextBox4に表示 セルE1に入力されている文字をTextBox5に表示と言う様な感じで表示したいです。 セル表示範囲は、A1~E24までのセルでTextBoxもTextBox24まで存在します。 TextBox1.Text = ThisWorkbook.Sheets("Sheet1").Range("A1") TextBox2.Text = ThisWorkbook.Sheets("Sheet1").Range("B1") TextBox3.Text = ThisWorkbook.Sheets("Sheet1").Range("C1") TextBox4.Text = ThisWorkbook.Sheets("Sheet1").Range("D1") TextBox5.Text = ThisWorkbook.Sheets("Sheet1").Range("E1") TextBox6.Text = ThisWorkbook.Sheets("Sheet1").Range("A2") TextBox7.Text = ThisWorkbook.Sheets("Sheet1").Range("B2") TextBox8.Text = ThisWorkbook.Sheets("Sheet1").Range("C2") TextBox9.Text = ThisWorkbook.Sheets("Sheet1").Range("D2") TextBox10.Text = ThisWorkbook.Sheets("Sheet1").Range("E2") 以降~途中省略 TextBox120.Text = ThisWorkbook.Sheets("Sheet1").Range("E24") と言う様な・・・ 上記の、この様なコードでして行くと事は可能なんですが・・・ もっと短く出来ないでしょうか?

  • コントロール配列と同じような扱い方

    TextBox1、TextBox2、TextBox3・・・・TextBox10 と10個のテキストボックスにVB6で使っていたコントロール配列と同じような処理の仕方をコードで教えていただけませんか。 for i=0 to 9 TextBox(i).Text=i next i 上記のコードをVB.NETで書くとすれば、どのように書けばいいかということさえわかれば、なんとか頑張れる気がします。

  • エクセルSheetのTextBoxのTextを参照するには??

    エクセルSheetのTextBoxのTextを参照するには?? アクセス(v2010)のVBAで、エクセルファイルのSheet上の テキストボックスの文字列を設定・変更したいと思います。 Cellについては、objSheet.Range("M2").Value で できますが・・・・ ご教示ください。

専門家に質問してみよう