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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
VBA。複数のChangeイベントをまとめる方法
Visual Basic(VBA)
-
VBAのフォームでTextBoxがいっぱいある時
Access(アクセス)
-
複数のテキストボックスに同じ処理をしたい
Visual Basic(VBA)
-
-
4
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
5
複数個のTextBoxでいずれかの内容が変更された事の把握
Visual Basic(VBA)
-
6
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
7
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
8
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
9
VBからエクセルのテキストボックスの名称を取得したい
Visual Basic(VBA)
-
10
複数のtextboxの処理を一括で行えませんか?
Visual Basic(VBA)
-
11
TextBoxから数字が文字として入力される?
Visual Basic(VBA)
-
12
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
13
どこにもフォーカスを当てたくない
Access(アクセス)
-
14
ExcelVBA EnableプロパティがFalseの時に文字の色を変えたくない
Visual Basic(VBA)
-
15
VBAのフォーム上にTextBoxたくさんあるとき
IT・エンジニアリング
-
16
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
17
VBA テキストボックスの計算
Visual Basic(VBA)
-
18
ListViewで複数選択された項目を一度に削除する方法
Visual Basic(VBA)
-
19
テキストボックスの名前に変数をつける
Visual Basic(VBA)
-
20
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
文字列で小数点以下の0を削除し...
-
VBA エンターキーでイベントに...
-
Excel VBAでマウスの左クリック...
-
Excel2007 でのチェックボック...
-
Access からオブジェクトとして...
-
現在アクティブになっているオ...
-
ユーザーフォームのインポート...
-
PowerpointVBAで指定のShapeオ...
-
[C#] DataGridViewの項目名
-
日本語の文字化けを直す方法
-
エクセルVBAでセル番地を指定し...
-
エクセルのデータをwebフォーム...
-
コードでオブジェクトを最前面に
-
Excel VBA でPictureBoxオブジ...
-
Imageコントロールにグラフを表...
-
エクセルVBA初心者です。オブジ...
-
生成AI画像について
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
Excel VBAでマウスの左クリック...
-
文字列で小数点以下の0を削除し...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
Excel2007 でのチェックボック...
-
Accessのフォーム上にエクセル...
-
日本語の文字化けを直す方法
-
エクセルのデータをwebフォーム...
-
現在アクティブになっているオ...
-
PowerpointVBAで指定のShapeオ...
-
コードでオブジェクトを最前面に
-
【エクセル】複数のTextBoxに共...
-
Imageコントロールにグラフを表...
-
ユーザーフォームのインポート...
-
Access からオブジェクトとして...
-
構造体の静的な初期化
-
「SHDocVw」の意味
-
Excel VBA でPictureBoxオブジ...
おすすめ情報
文字数の関係でお礼に補足内容を記載させていただきました。
よろしくお願いいたします。
ご回答有難うございます。
前提条件で書かれていることについて追記させていただきます。
ほとんどの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)
を記載すれば良いという理解でよろしいでしょうか?
よろしくお願いいたします。