例ですが、Private Sub TextBox1_Enter()
TextBox1.SelStart = 0
TextBox1.SelLength = TextBox1.MaxLength
End Sub
.
.
.
Private Sub TextBox100_Enter()
TextBox100.SelStart = 0
TextBox100.SelLength = TextBox100.MaxLength
End Sub
と100回のコーディングを簡単に出来る事ってできないのでしょうか?
初心者に解りやすいアドバイスをお願いしたのですが・・・
宜しく、お願い致します。
「TextBox1_Enter」って〜VB6にありましたっけ。
今手元にVB6がないのでうろ覚えですが、確か「TextBox1_GetFocus」とかじゃ
なかったかなぁ…。
〜VB6ならTextBoxを 1〜100の配列として
Private Sub TextBox_Enter()
VB2002〜なら
Private Sub TextBox_Enter()
Handles TextBox1.Enter, …, TextBox100.Enter
でできると思います。
配列にする場合は他のイベントプロシージャも共通になりますので、
コントロールごとに別の処理をさせたい場合はプロシージャ内部で振り分けるなどの
処理が必要になります。
VB2002〜でも配列化はやろうと思えばできますが、ちょっとめんどくさい
記述の必要がありますのでとりあえず割愛。
VB6 や VB.NET であれば、比較的簡単なのですが…
構文からして、VB6 でも .NET でもなく、VBA のようですね。
Access VBA ならば、フォームの Load 時にコントロールを列挙して、
各テキストボックスの OnEnter を割り当てるという方法がありますが、
ソースをみた感じでは、Access のそれでも無さそうですね。
もしも、Excel の UserForm だとすると、難易度は高いです。
これが Enter イベントではなく、MouseDown イベント等であれば、
Private WithEvents InternalTextBox As MSForms.TextBox
を持ったクラスを用意すれば済むのですが、Enter イベントを持つ
Private WithEvents InternalTextBox As MSForms.Control
の利用については、サポートされていないためです。
それでも Enter イベントをまとめたいなら、
http://www2.moug.net/bbs/exvba/20071112000004.htm
の、2007/11/13 20:22:02 および 20:42:11 の記事を参考に、
イベント接続用のオブジェクトを実装する必要があります。
とりあえずの逃げ道としては:
==================================================================
(案1) コードの書き換えを減らすために、ActiveControl を併用する。
------------------------------------------------------------------
Private Sub EnterTemplate()
ActiveControl.SelStart = 0
ActiveControl.SelLength = ActiveControl.MaxLength
End Sub
Private Sub TextBox1_Enter()
EnterTemplate
End Sub
:
Private Sub TextBox100_Enter()
EnterTemplate
End Sub
==================================================================
(案2) コードそのものを生成するツールを作成する。
------------------------------------------------------------------
下記のコードを実行すると、sample.txt にソースコードが
生成されるので、それをフォームに貼りつける。
(100 個分を手で書くよりは、間違いが減るかと)
Open "C:\sample.txt" For Output As #256
Dim i As Integer
For i = 1 To 100
Print #256,
Print #256, "Private Sub TextBox" & CStr(i) & "_Enter()"
Print #256, vbTab; "TextBox" & CStr(i) & ".SelStart = 0"
Print #256, vbTab; "TextBox" & CStr(i) & ".SelLength = TextBox" & CStr(i) & ".MaxLength"
Print #256, "End Sub"
Next
魔界の仮面弁士さん、さるべーじさん、貴重な時間を割いていただき、ありがとうございました。
魔界の仮面弁士さんの言うとおり、VBAです。言い方が悪くて申し訳ありませんでした。
ExcelのUserFormだと、難易度が高いということですが、自分ではまだまだ理解するのに時間がかかると思いますので、(案1)の方法でコーディングする事にします。
実際、以下のコードを入力して実行してみたのですが・・・
Private Sub EnterTemplate()
ActiveControl.SelStart = 0
ActiveControl.SelLength = ActiveControl.MaxLength
End Sub
Private Sub TextBox1_Enter()
EnterTemplate
End Sub
:
Private Sub TextBox100_Enter()
EnterTemplate
End Sub
上記のコードの
Private Sub EnterTemplate()
ActiveControl.SelStart = 0
ActiveControl.SelLength = ActiveControl.MaxLength
End Sub
で実行時エラー'438'
が発生したのですが・・・
横から失礼致します。
ExcelのVBAのようですが、バージョンはいくつなのでしょう?
Windows2000+Excel2000では上記コードでエラーが発生しませんでした。
ご報告までに。
環境は、WindowsXP + Excel2003です。
編集 削除