UserForm1上にText◯◯1~10、Text△△1~10、Text□□1~10などTextで始まるオブジェクト名の100個以上のTextBoxがあります。
これらのうちのいずれかのTextBoxの値が変更(消去)されたり、新たに入力された場合に
Me.TextKoushin.Value = "未更新"
Me.TextKoushin.BackColor = RGB(255, 0, 0)
Me.TextKoushin.ForeColor = RGB(255, 255, 255)
というChegeイベント全てのTextBoxに書くことなくコントロールすることは出来ますでしょうか?
この際、TextKoushinのオブジェクト名にもTextと入っているのがまずければTxtKoushinと変更します。
また、UserFormは1~4までありますが、
適用したいのはUserForm1のみです。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
1)クラスモジュール(Class1)を追加して、以下のコードを記入してください。
-------------------------------
Option Explicit
Private WithEvents myText As MSForms.TextBox
Private myTextBox As String
Public Sub S_setText(NewText As MSForms.TextBox, name As String)
Set myText = NewText
myTextBox = name
End Sub
Private Sub myText_Change()
UserForm1.TextKoushin.Value = "未更新"
UserForm1.TextKoushin.BackColor = RGB(255, 0, 0)
UserForm1.TextKoushin.ForeColor = RGB(255, 255, 255)
End Sub
---------------------------------------------
2)UserForm1のコードへ以下のコードを追加してください。
----------------------------------------------------
Option Explicit
Private myTextArray() As New Class1
Private Sub UserForm_Initialize()
Dim i As Long
Dim j As Long
Dim ix As Long
Dim textBoxName As Variant
textBoxName = Array("TextBoxAA", "TextBoxBB")
ReDim myTextArray(10 * (UBound(textBoxName) + 1) - 1)
For i = 0 To UBound(textBoxName)
For j = 1 To 10
ix = 10 * i + j
Call myTextArray(ix - 1).S_setText(Me(textBoxName(i) & j), textBoxName(i) & j)
Next
Next
End Sub
----------------------------------------------------------
上記は、テキストボックスが、
TextBoxAA1~TextBoxAA10
TextBoxBB1~TextBoxBB10
の例です。
textBoxName = Array("TextBoxAA", "TextBoxBB")
の行へ"TextBox○○"を必要なぶん追加してください。
TextBox○○はTextBox○○1~TextBox○○10まであることが前提です。
以上で完了です。
尚、質問でも行いましたが、
TextKoushinを"未更新"から元の状態に戻す機能はありませんので、その旨ご了承ください。
レスポンスの良いご回答を本当にありがとうございます。
実装は明日にしようと思っていますが、
その前に再度確認でお願いします。
Dim textBoxName As Variant
textBoxName = Array("TextBoxAA", "TextBoxBB")
ReDim myTextArray(10 * (UBound(textBoxName) + 1) - 1)
For i = 0 To UBound(textBoxName)
For j = 1 To 10
ix = 10 * i + j
Call myTextArray(ix - 1).S_setText(Me(textBoxName(i) & j), textBoxName(i) & j)
この部分にある、オブジェクト名"TextBoxAA", "TextBoxBB"ですが、実際は"TextAA", "TextBB"です。
なので「Box」は入りません。
その次の行以下の、 小文字tで始まるtextBoxと記載されているUBound(textBoxName)、textBoxName(i)については、
UBound(textName)、textName(i)という形で「Box」を省略する訳では無いという解釈でよろしいでしょうか?
No.5
- 回答日時:
>この部分にある、オブジェクト名"TextBoxAA", "TextBoxBB"ですが、実際は"TextAA", "TextBB"です。
なので「Box」は入りません。
>その次の行以下の、 小文字tで始まるtextBoxと記載されているUBound(textBoxName)、textBoxName(i)については、UBound(textName)、textName(i)という形で「Box」を省略する訳では無いという解釈でよろしいでしょうか?
失礼しました。Text○○でしたね。見落としました。
はい、「小文字tで始まるtextBoxと記載されているUBound(textBoxName)、textBoxName(i)については、UBound(textName)、textName(i)という形で「Box」を省略する訳では無い」という解釈で良いです。
変更するのは、
textBoxName = Array("TextBoxAA", "TextBoxBB")
の行だけです。ほかは、変更不要です。
今回の例では、TextAA1~TextAA10,TextBB1~TextBB10なので、
textBoxName = Array("TextAA", "TextBB")
が正しいことになります。
ありがとうございます。
承知いたしました!
明日実装してみて状況を報告させていただきます。
今日はこれにて失礼致します。
それではおやすみなさいませ。
No.4
- 回答日時:
>ほとんどのTextBoxが、Text◯◯1~Text◯◯10、Text△△1~Text△△10という形ですが、
TextBirthdayやTextKinmusakiなど1人の顧客において1つしか必要のないデータなどは1~10という設定が無いTextBoxが複数個あります。
>この場合、そのTextBirthdayやTextKinmusakiなどにはそれぞれにChangeイベントとして
>Me.TextKoushin.Value = "未更新"
>Me.TextKoushin.BackColor = RGB(255, 0, 0)
>Me.TextKoushin.ForeColor = RGB(255, 255, 255)
>を記載すれば良いという理解でよろしいでしょうか?
はい、それで良いです。
強引にUserForm_Initializeに組み込むことも可能ですが、
そのようなことをするよりは、個別にChangeイベント
を登録したほうが判りやすいかと考えます。
もし、UserForm_Initializeへ強引に組み込むなら
以下のようになります。
TextBirthdayとTextKinmusakiを組み込む場合の例です。
'追加開始と'追加終了ではさまれた部分が、追加した処理です。
-------------------------------------------------
Private Sub UserForm_Initialize()
Dim i As Long
Dim j As Long
Dim ix As Long
Dim textBoxName As Variant
textBoxName = Array("TextBoxAA", "TextBoxBB")
ReDim myTextArray(10 * (UBound(textBoxName) + 1) - 1)
For i = 0 To UBound(textBoxName)
For j = 1 To 10
ix = 10 * i + j
Call myTextArray(ix - 1).S_setText(Me(textBoxName(i) & j), textBoxName(i) & j)
Next
Next
'追加開始
Dim last As Long
textBoxName = Array("TextBirthday", "TextKinmusaki")
last = UBound(myTextArray) + 1
ReDim Preserve myTextArray(last + UBound(textBoxName))
For i = 0 To UBound(textBoxName)
Call myTextArray(last + i).S_setText(Me(textBoxName(i) & ""), textBoxName(i) & "")
Next
'追加終了
End Sub
-----------------------------------------------
どちらか、好きなほうを選んでください。
No.2
- 回答日時:
No1です。
http://ateitexe.com/excelvba-control-change-event/
の指示に従い、chengeイベントをまとめて処理することは、できたのですが、
>これらのうちのいずれかのTextBoxの値が変更(消去)されたり、新たに入力された場合に
>Me.TextKoushin.Value = "未更新"
>Me.TextKoushin.BackColor = RGB(255, 0, 0)
>Me.TextKoushin.ForeColor = RGB(255, 255, 255)
>というChegeイベント全てのTextBoxに書くことなくコントロールすることは出来ますでしょうか?
>この際、TextKoushinのオブジェクト名にもTextと入っているのがまずければTxtKoushinと変更します。
上記のことで、いくつか質問があります。
1)TextKoushinはテキストボックスですか。
2)UserForm1のテキストボックス(TextKoushin)の表示内容、表示色、及び背景を上記のように変えれば
よいのでしょうか。
3)TextKoushinを上記のように変えた後、もとに戻すのは、ここでは考慮しなくて良いのですね。
(なにかほかの処理で元に戻していると理解して良いですね)
こんばんは。
ご回答有難うございます。
ご質問について返信致します。
1)TextKoushinはTextBoxです。
2)仰るとおりです。
3)KoushinButtonというCommandButtonを配置して下記のような記載をしております。
これと関連させるために今回の質問をさせていただいた次第です。
Private Sub KoushinButton_Click()
Dim SerchKey As String
Dim SerchArea As Range
SearchKey = Me.TextBukkenNumber.Value
If SearchKey = "" Or SearchKey = "False" Then Exit Sub
Set SearchArea = Sheets("データベース").Range("A:A")
Set FoundCell = SearchArea.Find( _
What:=SearchKey, _
SearchOrder:=xlByRows, _
LookAt:=xlWhole, _
MatchCase:=False)
If FoundCell Is Nothing Then
MsgBox "該当するデータはありません", vbCritical
Else
With FoundCell
Dim TextKinyubi As Date
Me.TextKinyubi = Format(Now, "ggge年mm月dd日")
.Offset(0, 1).Value = Me.Combokokyakumei.Value
.Offset(0, 2).Value = Me.TextKinmusaki.Value
(以下100行ほど省略)
End With
End If
Set SearchArea = Nothing
Me.TextHozon.Value = "更新済"
Me.TextHozon.BackColor = RGB(0, 0, 255)
Me.TextHozon.ForeColor = RGB(255, 255, 255)
ActiveWorkbook.Save
MsgBox "データ更新と上書き保存が完了しました。", vbInformation, "更新と上書き保存"
End Sub
よろしくお願いいたします。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelのtextboxへの入力で小数点以下に0が続く場合でも正しく表示したい 3 2022/04/11 13:53
- 英語 I'd rather you stopped sending me ★a text★ ??? 1 2022/12/28 17:06
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- Visual Basic(VBA) Excel VBA ユーザーフォーム内のラベルにテキストボックスの小計を出す方法 5 2022/08/17 14:27
- Visual Basic(VBA) 配列にしたセル範囲でのコメントがあるかどうかを取得するコードの書き方 2 2022/09/17 05:09
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
VBA。複数のChangeイベントをまとめる方法
Visual Basic(VBA)
-
VBAのフォームでTextBoxがいっぱいある時
Access(アクセス)
-
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
-
4
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
5
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
8
複数のテキストボックスに同じ処理をしたい
Visual Basic(VBA)
-
9
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
10
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
11
UserForm1.Showでエラーになります。
工学
-
12
Excel vbaで複数のテキストボックスの足し算
Visual Basic(VBA)
-
13
複数のtextboxの処理を一括で行えませんか?
Visual Basic(VBA)
-
14
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
15
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
16
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
17
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
18
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
19
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
20
VBAのリストボックスをマウスでスクロール
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
エクセルVBAでセル番地を指定し...
-
【エクセルのマクロ】クリップ...
-
文字列で小数点以下の0を削除し...
-
Excel VBAでマウスの左クリック...
-
エクセルのデータをwebフォーム...
-
Access からオブジェクトとして...
-
Excelでの図形の描画
-
SelectObjectの戻り値
-
日本語の文字化けを直す方法
-
VBからCrystalReportsへSQL文を...
-
動的に追加したコントロールに...
-
VB6にて文字型変数の内容をオブ...
-
ディスクの総セクタサイズを取...
-
Excel2007マクロでメモリが増加...
-
コードでオブジェクトを最前面に
-
ユーザーフォームのインポート...
-
エクセルVBA初心者です。オブジ...
-
PowerpointVBAで指定のShapeオ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
Excel VBAでマウスの左クリック...
-
エクセルVBAでセル番地を指定し...
-
Excel2007 でのチェックボック...
-
現在アクティブになっているオ...
-
【エクセルのマクロ】クリップ...
-
日本語の文字化けを直す方法
-
【エクセル】複数のTextBoxに共...
-
コードでオブジェクトを最前面に
-
Accessのフォーム上にエクセル...
-
文字列で小数点以下の0を削除し...
-
PowerpointVBAで指定のShapeオ...
-
LoadImage関数について(VC++)
-
ユーザーフォームのインポート...
-
VBAでフォームのコントロールの...
-
Access からオブジェクトとして...
-
構造体の静的な初期化
-
[C#] DataGridViewの項目名
-
「SHDocVw」の意味
おすすめ情報
文字数の関係でお礼に補足内容を記載させていただきました。
よろしくお願いいたします。
ご回答有難うございます。
前提条件で書かれていることについて追記させていただきます。
ほとんどのTextBoxが、Text◯◯1~Text◯◯10、Text△△1~Text△△10という形ですが、
TextBirthdayやTextKinmusakiなど1人の顧客において1つしか必要のないデータなどは1~10という設定が無いTextBoxが複数個あります。
この場合、そのTextBirthdayやTextKinmusakiなどにはそれぞれにChangeイベントとして
Me.TextKoushin.Value = "未更新"
Me.TextKoushin.BackColor = RGB(255, 0, 0)
Me.TextKoushin.ForeColor = RGB(255, 255, 255)
を記載すれば良いという理解でよろしいでしょうか?
よろしくお願いいたします。