« 速度と効率10倍アップ 実務翻訳者のためのWordマクロ 基礎の基礎 | トップページ | エンジニアのためのWord再入門講座(書籍紹介) »

2009年8月 9日 (日)

ユーザーフォームが立ち上がったときに、所定のテキストボックスの文字を選択する

ユーザーフォームを作成しました。

このユーザーフォームが立ち上がったときに、所定のテキストボックス(文字を入力できる欄)の文字が選択されている状態にするコードです。

ユーザーフォームを開くたびに、テキストボックスに記入されている数字を変更したいと思っています。

そのため、ユーザーフォームが立ち上がったときには、すでに数字が選択されている状態にして、あとはキーボードから数字を入力してEnterキーを押せばプログラムが実行されるような操作をしたいと思いました。

こうすれば、テキストボックスにカーソルを移動するためにマウスを使わなくてもよいし、さらに、テキストボックスの文字列(数字)を選択する必要もありませんから、操作のストレスが少し減ります。

Inputbox 左の画像のとおり、インプットボックスにデフォルトで設定された文字列(左の場合には数字の1)が、インプットボックスが表示されたときにすでに選択された状態になっているのと同じことをしたいと思いました。

●プログラム

Private Sub UserForm_Initialize()

10        With TextBox1
20            .Text = "sample text"
30            .SetFocus
40            .SelStart = 0
50            .SelLength = Len(.Text)
60        End With

End Sub

●プログラム翻訳

ユーザーフォームの名前をUserForm1とします。また、その中にあるテキストボックスをTextBox1とします。

Private Sub UserForm_Initialize()は、ユーザーフォームを開く場合に、ユーザーフォームの初期設定をするプロシージャを示します。

10行と60行: 20行から50行までの対象をTextBox1に定めています。

20行: テキストボックスに入力する文字列。仮に"sample text"としました。

30行: .SetFocusメソッドにてカーソル位置をこのTextBox1に移します。今回は、テキストボックスなのでカーソルが見えますが、対象がオプションボタンである場合にはカーソルは見えません。操作の対象として、オプションボタンが選ばれた状態になるというわけです。

VBAでは、上記のようなことを、「フォーカスを移動させる」といいます。

40行: SelStart でテキストボックス内の最初のカーソル位置を設定。0の値なので、テキストボックス内の一番左端にカーソルが移動します。

50行: SelLength でテキストボックス内の最後のカーソル位置を設定。Len(.Text)とすることで、テキストボックス内の文字列の文字数分を最後のカーソル位置としています。結果として、テキストボックス内の文字列が選択されることになります。

●情報源

この方法がわからなかったので、グーグルのニュースグループに質問を投稿して教えてもらいました。こちらをご参照。

ちなみに、なぜか、私が作りこんだユーザーフォームでは、上記のコードはうまく動かないのです。

原因は不明でしたが、通常はうまく行くはずですので、ご心配なく。

|

« 速度と効率10倍アップ 実務翻訳者のためのWordマクロ 基礎の基礎 | トップページ | エンジニアのためのWord再入門講座(書籍紹介) »

マクロプログラム」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/519619/45876194

この記事へのトラックバック一覧です: ユーザーフォームが立ち上がったときに、所定のテキストボックスの文字を選択する:

« 速度と効率10倍アップ 実務翻訳者のためのWordマクロ 基礎の基礎 | トップページ | エンジニアのためのWord再入門講座(書籍紹介) »