プロが教えるわが家の防犯対策術!

質問のタイトルからして、何の質問という感じで
すみません。TextBox1.TextをTextBox10.Textまでつくり
cells(1,1)=TextBox1.Text
l
l
cells(1,10)=TextBox10.Text

各セルにTextBoxの内容を書き込みたいのです。セルとテキストの変化
部分をそれぞれ、変数1、変数2とおいてFor~Next なりDo until loop
なりで、変数を変化させようと思いました。cells(1,変数1)の指定
は上手くいったのですが、TextBox変数2.Textの指定がうまくいきません。
TextBox変数2.Textについてどのように変数の設定をしたら、良いでしょうか?
そもそも、TextBox1.Textの数字部分【1】は変数に指定できないのでしょうか?

すみませんが教えてください。EXCEL2000を使っています。

A 回答 (3件)

》そもそも、TextBox1.Textの数字部分【1】は変数に指定できないのでしょうか?



その通りです。

簡単なのは、「Controls コレクション」を使う事です。詳しくはヘルプを見てください。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。早速ヘルプをみてみます。

お礼日時:2002/08/06 13:21

VBと違って、VBAではコントロール配列が使えません。

対応方法としては、
 1.Collectionオブジェクトを作る
 2.WithEvents(クラス)を利用
 3.直接コントロール名(テキストボックス名)を利用
が考えられます。

この質問では、TextBox1~TextBox10となっているので、3のテキストボックス名を使ってみます。
テキストボックスはシート上にあってもユーザーフォーム上にあっても同じ考え方でできるでしょう。

2については、
 『VBAのフォームでTextBoxがいっぱいある時』
   http://www.okweb.ne.jp/kotaeru.php3?q=261042
を参考にして下さい。


標準モジュールに貼り付け

Sub Test01()
  Dim myTxt As OLEObject 'TextBox
  Dim txtNo As Integer 'テキストボックスの番号
  Dim colNo As Integer '列

  'アクティブシートのオブジェクトを調べる
  For Each myTxt In ActiveSheet.OLEObjects
    'テキストボックスだったら
    If TypeName(myTxt.Object) = "TextBox" Then
      'TextBox名の数値部分を取り出す
      txtNo = Application.Substitute(myTxt.Name, "TextBox", "")
      'TextBox1~TextBox10だったら
      If 1 <= txtNo And txtNo <= 10 Then
        '変数1=変数2 にした
        colNo = txtNo
        'セルに書き出す
        Cells(1, colNo) = myTxt.Object.Value
      End If
    End If
  Next
End Sub

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=261042

この回答への補足

すみません。教えた頂いた内容を元に、試行錯誤したのですがうまくアイデアが
浮かびませんでした。
実は、
(1)TextBox1.Textに入力した内容をWorksheets("sheet1").Cells(Y, 2)
と比較する。
(2)内容が一致していたらWorksheets("sheet2")のCells(Y, 3)にWorksheets("sheet1")のCells(Y, 3)情報をセットする。
(3)さらにTextBox11.TextにWorksheets("sheet1")のCells(Y, 3)情報を表示させるようにしたかったのです。

For Y = 3 To 10
X = Worksheets("sheet1").Cells(Y, 2) Like TextBox1.Text
If X = True Then
Worksheets("sheet2").Cells(Y, 3)=Worksheets("sheet1").Cells(Y, 3)
TextBox11.Text = Worksheets("sheet1").Cells(Y, 3)
End If

Next

次にTextBox2.TextはTextBox12.Text
次にTextBox3.TextはTextBox13.Text
とTextBox10.TextはTextBox20.Textまで同様のことをやらせたかったのです。
TextBoxの数字が変数にならないので、同様のプログラムを10個書いています。

度々お手数をおかけいたします。

補足日時:2002/08/06 13:05
    • good
    • 0
この回答へのお礼

VBAを始めたばかりの初心者でこれを理解するのにもう少し自分で勉強の必要
があるかと思います。詳細なご説明どうもありがとうございました。
参考にさせて頂きたいと思います。

お礼日時:2002/08/06 12:33

書いてみましたが、シート上のコントロールツールボックスのテキストボックスでしょうか。


一番面倒な場合かもしれませんね。

今から出かけますので、数日間連絡できません。ご容赦を。


補足を反映したつもりですが、時間がなくて推敲不足です。別法もありそう?(Excel2000です)

Sub Test02()
  Dim ws1 As Worksheet 'ワークシート1
  Dim ws2 As Worksheet 'ワークシート2
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

  Const y0 = 2

  Dim myTxt As OLEObject 'TextBox
  Dim myTxt2 As OLEObject 'TextBox
  Dim txtNo As Integer 'テキストボックスの番号
  Dim txtNo2 As Integer 'テキストボックスの番号
  Dim colNo As Integer '列

  'テキストボックス11~20をクリア
  For Each myTxt2 In ws1.OLEObjects
    If TypeName(myTxt2.Object) = "TextBox" Then
      txtNo2 = Application.Substitute(myTxt2.Name, "TextBox", "")
      If 11 <= txtNo2 And txtNo2 <= 20 Then
        myTxt2.Object.Text = ""
      End If
    End If
  Next

  '比較してセルとテキストボックスの値を更新する
  For Each myTxt In ws1.OLEObjects
    If TypeName(myTxt.Object) = "TextBox" Then
      txtNo = Application.Substitute(myTxt.Name, "TextBox", "")
      If 1 <= txtNo And txtNo <= 10 Then
        ws2.Cells(txtNo + y0, 3) = ""
        If myTxt.Object.Value = Val(ws1.Cells(txtNo + y0, 2)) Then
          ws2.Cells(txtNo + y0, 3) = ws1.Cells(txtNo + y0, 3)
          'テキストボックス11~20の更新
          For Each myTxt2 In ws1.OLEObjects
            If TypeName(myTxt.Object) = "TextBox" Then
              txtNo2 = Application.Substitute(myTxt2.Name, "TextBox", "")
              If txtNo2 = txtNo + 10 Then
                myTxt2.Object.Text = ws1.Cells(txtNo + y0, 3)
              End If
            End If
          Next

        End If
      End If
    End If
  Next
End Sub
    • good
    • 0
この回答へのお礼

すっごーーーーーーーーーーーーーーーーい!!
度々すみません。感涙です!! ううう。みずしらずの私のような
やからに、お出かけ前にすみません。
しかし、このプログラムを理解するために、少し勉強します。
まだ、うまく飲み込めないところがありますので。

お礼日時:2002/08/06 17:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!