Excel VBA質問箱 IV

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

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


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

【53307】テキストボックス等の一括消去 新参者 07/12/26(水) 21:25 質問[未読]
【53310】Re:テキストボックス等の一括消去 じゅんじゅん 07/12/26(水) 21:48 発言[未読]
【53312】Re:テキストボックス等の一括消去 ponpon 07/12/26(水) 22:19 発言[未読]
【53313】Re:テキストボックス等の一括消去 neptune 07/12/26(水) 22:24 回答[未読]
【53314】Re:テキストボックス等の一括消去 neptune 07/12/26(水) 22:26 発言[未読]
【53322】Re:テキストボックス等の一括消去 新参者 07/12/27(木) 20:34 お礼[未読]

【53307】テキストボックス等の一括消去
質問  新参者  - 07/12/26(水) 21:25 -

引用なし
パスワード
   テキストボックスがフォームに10〜15個あり、一括してテキスト内を空白にしたいのですが、また

do
str1 = worksheets("***").cells(i,1)
  combobox1.additem str1
  combobox2.additem str1
      .
      .
      .
  combobox6.additem str1
i = i + 1
loop while str <> ""
のようにオブジェクトを一個一個書いてました。
もっと簡単なやり方があると思うのですが分かりません。
for〜nextを使ったりするのでしょうか?
教えてください。

【53310】Re:テキストボックス等の一括消去
発言  じゅんじゅん  - 07/12/26(水) 21:48 -

引用なし
パスワード
   ▼新参者 さん:
>テキストボックスがフォームに10〜15個あり、一括してテキスト内を空白にしたいのですが、また
>
>do
>str1 = worksheets("***").cells(i,1)
>  combobox1.additem str1
>  combobox2.additem str1
>      .
>      .
>      .
>  combobox6.additem str1
>i = i + 1
>loop while str <> ""
>のようにオブジェクトを一個一個書いてました。
>もっと簡単なやり方があると思うのですが分かりません。
>for〜nextを使ったりするのでしょうか?
>教えてください。

ユーザーフォーム1のテキストボックスなら
Sub TRY()
Dim x
For Each x In UserForm1.Controls
   If TypeName(x) = "TextBox" Then
    x.Value = ""
   End If
Next
End Sub
こんなかな?

【53312】Re:テキストボックス等の一括消去
発言  ponpon  - 07/12/26(水) 22:19 -

引用なし
パスワード
   すでに、じゅんじゅんさんから回答がありますが、せっかく作ったので
フォームモジュール以外に書く場合は、
MeをUserForm1などに変えてください。

  Dim Txt As Object
  For Each Txt In Me.Controls
    If Txt.Name Like "TextBox*" Then
      Txt.Value = ""
    End If
  Next
テキストボックスの番号がわかっているなら
  Dim i As Integer
  For i = 1 To 15
   Me.Controls("TextBox" & i).Text = ""
  Next

コンボボックスのadditemは、
  Dim i As Integer
  For i = 1 To 6
    With Worksheets("***")
      Me.Controls("ComboBox" & i).List = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)).Value
    End With
  Next

【53313】Re:テキストボックス等の一括消去
回答  neptune  - 07/12/26(水) 22:24 -

引用なし
パスワード
   ▼新参者 さん:
こんにちは

>のようにオブジェクトを一個一個書いてました。
>もっと簡単なやり方があると思うのですが分かりません。
↑が一番簡単と思います。

難易度でいうと高いと思いますが、使い方は簡単な例
勉強の種にでもしてください。
・新規Book
・UserFormにTextBox2個、CommandButton2個配置
・プロジェクトにClassモジュールを2つ追加

以下をコピペ

'////////////UserForm/////////////
Private clsText As Class1

Private Sub CommandButton1_Click()
  clsText.ClearText
End Sub

Private Sub CommandButton2_Click()
  MsgBox "TextBox2のデータは" & clsText.Items(2).Text
End Sub

Private Sub UserForm_Initialize()
  Set clsText = New Class1
  clsText.AddItem Me.TextBox1
  clsText.AddItem Me.TextBox2
  
  Me.CommandButton1.Caption = "TextBoxをクリアする"
  Me.CommandButton2.Caption = "TextBox2のデータを取得する"
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Set clsText = Nothing
End Sub

'Class1に以下をコピペ
Option Explicit

Private mCol As Collection
Private clsTxt As Class2

Private Sub Class_Initialize()
  Set mCol = New Collection
End Sub

Private Sub Class_Terminate()
  Set mCol = Nothing
End Sub

Public Function AddItem(pData As MSForms.TextBox)
  Set clsTxt = New Class2
  Set clsTxt.mTextBox = pData
  mCol.Add clsTxt
End Function

Public Property Get Items(pData) As MSForms.TextBox
  Set Items = mCol.Item(pData).mTextBox
End Property

Public Function ClearText()
Dim t As Object
  For Each t In mCol
    t.ClearText
  Next
End Function

'Class2に以下をコピペ
Option Explicit

Private WithEvents mText As MSForms.TextBox

Public Property Set mTextBox(pData As MSForms.TextBox)
  Set mText = pData
End Property

Public Property Get mTextBox() As MSForms.TextBox
  Set mTextBox = mText
End Property

Public Function ClearText()
  mText.Text = ""
End Function

準備が出来たらUserFormを表示させてください。textboxにも適当に入力。
多分操作は解ると思います。

ちなみに、for eachが使いたいならCollectionを調べると参考になると思います。

【53314】Re:テキストボックス等の一括消去
発言  neptune  - 07/12/26(水) 22:26 -

引用なし
パスワード
   サンプル書いている間に沢山レスが付いてましたね。^ ^;;
ま、それぞれやり方が違うから参考にはなりますね。

【53322】Re:テキストボックス等の一括消去
お礼  新参者  - 07/12/27(木) 20:34 -

引用なし
パスワード
   じゅんじゅんさん
ponponさん
neptuneさん
さっそくの返答ありがとうございます。
まだ、試していませんが先ずお礼申します。
ありがとうございました。
早速試してみます。
まだ初心者なので、分からないところが多々あります。
そのときはよろしくお願いします。
新参者より・・・

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