はじめに
VBAのユーザーフォームで、利用規約やアプリケーションのヘルプ、詳細な注意事項といった、編集はさせずに、長い文章をスクロールしながら読んでもらいたい、という場面があります。
このような場合、複数行設定にした「テキストボックス」を、編集不可の「表示エリア」として活用するのが非常に便利です。
この記事では、テキストボックスを使って長い読み取り専用のテキストを、スクロールバー付きで表示し、かつ常に先頭から表示させるための、一連のプロパティ設定について解説します。
長文表示用テキストボックスの設定サンプルコード
この設定は、ユーザーフォームが表示される直前の UserForm_Initialize
イベント内で行うのが最適です。
この例では、AgreementForm
というフォームに配置された TermsTextBox
に、あらかじめ用意しておいた利用規約の文章をセットして表示します。
ユーザーフォームのコード
' フォームが初期化されるときに実行されるイベント
Private Sub UserForm_Initialize()
Dim termsText As String
' 表示する長文テキストを準備(実際にはシートや外部ファイルから読み込むと便利)
termsText = "第1条(目的)" & vbCrLf
termsText = termsText & "この利用規約は..." & vbCrLf
termsText = termsText & "(...長い文章が続く...)" & vbCrLf
termsText = termsText & "以上"
With Me.TermsTextBox
' --- 表示に関する設定 ---
.MultiLine = True ' 複数行を有効にする
.WordWrap = True ' 自動で右端で折り返す
.ScrollBars = fmScrollBarsVertical ' 垂直スクロールバーを表示
' --- 編集・選択に関する設定 ---
.Locked = True ' ユーザーによるテキストの編集を禁止
.EnterKeyBehavior = True ' Enterキーで改行(Locked=Trueなら不要だが念のため)
' --- 内容と表示位置の設定 ---
.Text = termsText ' テキストをセット
' .SetFocusメソッドで、一度テキストボックスにフォーカスを当てる
.SetFocus
' .CurLineプロパティで、表示する行を先頭(0行目)に設定
.CurLine = 0
End With
End Sub
コード(プロパティ)の解説
.MultiLine
, .WordWrap
, .ScrollBars
これらは長文を表示するための基本的な設定です。
.MultiLine = True
: 複数行の表示を可能にします。.WordWrap = True
: テキストが枠の右端で自動的に折り返されるようにします。.ScrollBars = fmScrollBarsVertical
: テキストが枠内に収まらない場合に、垂直スクロールバーを表示します。
.Locked = True
このプロパティを True
に設定すると、テキストボックスは読み取り専用になり、ユーザーは内容を編集できなくなります。これにより、テキストボックスを単なる「表示エリア」として使うことができます。
.SetFocus
と .CurLine
テキストボックスに長い文章をセットしただけだと、表示されたときに文章の末尾が見えてしまうことがあります。これを防ぎ、常に文章の先頭が表示されるようにするのが、この2つの命令の役割です。
.SetFocus
: まず、.SetFocus
メソッドを使って、対象のテキストボックスにプログラム的にフォーカス(アクティブな状態)を当てます。.CurLine = 0
: 次に、.CurLine
プロパティに0
を設定します。.CurLine
は、現在カーソルがある行を取得または設定するプロパティで、0
は一番最初の行(先頭行)を意味します。
この2つを順番に実行することで、フォームが表示された際に、テキストボックスのスクロール位置が強制的に一番上になり、ユーザーは必ず文章の最初から読み始めることができます。
まとめ
今回は、テキストボックスを読み取り専用の長文表示エリアとして活用するための設定方法を解説しました。
.Locked = True
で編集を禁止し、表示専用にする。.ScrollBars
でスクロールを可能にする。.SetFocus
と.CurLine = 0
を組み合わせることで、表示開始位置を確実に先頭に固定できる。
これらのテクニックを組み合わせることで、ユーザーフォーム内で、利用規約の同意や、操作マニュアルの提示といった機能を、スマートに実装することができます。