こんにちは、Ryoです。
ユーザーフォーム上に設けたテキストボックスへスクロールバーを設定したい場合はScrollBarプロパティを利用することで対処できます。このプロパティは水平方向、垂直方向及び両方を設定することもできますので、その辺りの内容についても書いていきます。
1.サンプル概要
プロパティ設定によるスクロールバーのON/OFFを視覚的にわかりやすくする上で、下の画像のようなユーザーフォームを作成しています。

ToggleButton1はテキストボックス1へ垂直スクロールバー設定のON/OFFを行いますので、サンプルとして適当な文字入力と改行してスクロールバーを表示させています。再度トグルボタンを押すことでスクロールバー表示はOFFとなります。

ToggleButton2はテキストボックス1へ水平スクロールバー設定のON/OFFを行います。水平スクロールバーを表示する際はテキストボックスの複数行入力をOFFにしておく必要があります。

ToggleButton3はテキストボックス1へ垂直&水平スクロールバーを両方設定しON/OFFを行うものですが、垂直と水平スクロールバーは両方表示されるものではなく、複数行入力可の状態なら垂直バー表示で複数行入力が不可の状態であれは水平バーが表示される形になります。
その為、ToggleButton3がON状態で複数行入力可否を行うMultiLineプロパティをToggleButton4にてON/OFFすることで垂直&水平スクロールバーが両方設定されていることが確認できます。


これらの一連の動作は以下の通りになります。
以上がサンプル概要になります。
2.サンプルコード
テキストボックスにスクロールバーを表示するにはScrollBarプロパティを利用します。
オブジェクト.ScrollBars =expression
対象としているテキストボックスのMultiLineプロパティ(複数行入力設定)がTrueであれば垂直スクロールバーを表示、Falseであれば水平スクロールバーが表示されます。
≪ScrollBarsプロパティに指定する値≫
| 定数 | 内容 |
| fmScrollBarsNone | スクロールバーを非表示 |
| fmScrollBarsHorizontal | 水平スクロールバーを表示 |
| fmScrollBarsVertical | 垂直スクロールバーを表示 |
| fmScrollBarsBoth | 水平&垂直スクロールバーを表示 |
垂直・水平スクロールバー共にテキストボックスに設定しても、何も入力されていないテキストボックスの場合は表示されませんが、設定自体はされていますので文字入力などを行うことによってバーは表示されます。
その為、サンプルコードでは強制的に文字入力を行ってフォーカスをテキストボックスに戻すことでそれぞれのスクロールバーを表示させています。
◆ToggleButton1(垂直スクロールバー表示)
Private Sub ToggleButton1_Click()
'トグルボタン1クリック時の処理
' ⇒ボタンON/OFFで垂直スクロールバーの表示/非表示を切り替える
With TextBox1
'トグルボタンON/OFF判定
If ToggleButton1.Value Then
'テキストボックスに垂直スクロールバーを設定
.ScrollBars = fmScrollBarsVertical
'トグルボタン1のキャプション変更
ToggleButton1.Caption = "スクロールバー(垂直)非表示"
Else
'テキストボックスのスクロールバー解除
.ScrollBars = fmScrollBarsNone
'トグルボタン1のキャプション変更
ToggleButton1.Caption = "スクロールバー(垂直)表示"
End If
'テキストボックス1の複数行入力可設定
' ⇒本設定が「可」で垂直スクロールバーが有効となる
.MultiLine = True
'垂直スクロールバーを表示させる為に適当な文字と改行入力
.Text = "Sample" & vbLf _
& "ScrollBarプロパティ" & vbLf & vbLf & vbLf
'フォーカスをテキストボックスに移す
.SetFocus
End With
End Sub
◆ToggleButton2(水平スクロールバー表示)
Private Sub ToggleButton2_Click()
'トグルボタン2クリック時の処理
' ⇒ボタンON/OFFで水平スクロールバーの表示/非表示を切り替える
'テキストボックス1の複数行入力「不可」設定
' ⇒本設定「不可」で水平スクロールバーが有効
TextBox1.MultiLine = False
With TextBox1
'トグルボタン2ON/OFF判定
If ToggleButton2.Value Then
'テキストボックスに水平スクロールバーを設定
.ScrollBars = fmScrollBarsHorizontal
'トグルボタン2のキャプション変更
ToggleButton2.Caption = "スクロールバー(水平)非表示"
Else
'テキストボックスのスクロールバー解除
.ScrollBars = fmScrollBarsNone
'トグルボタン2のキャプション変更
ToggleButton2.Caption = "スクロールバー(水平)表示"
End If
'水平スクロールバーを表示させる為に適当な文字を入力
.Text = "Sample" & "_ScrollBarプロパティ"
'フォーカスをテキストボックスに移す
.SetFocus
End With
End Sub
◆ToggleButton3(垂直・水平スクロールバー表示)
Private Sub ToggleButton3_Click()
'トグルボタン3クリック時の処理
' ⇒ボタンON/OFFで水平+垂直スクロールバーの表示/非表示切り替え
With TextBox1
'トグルボタン3ON/OFF判定
If ToggleButton3.Value Then
'テキストボックスに水平+垂直スクロールバーを設定
TextBox1.ScrollBars = fmScrollBarsBoth
'トグルボタン3のキャプション変更
ToggleButton3.Caption = "スクロールバー(垂直・水平)非表示"
Else
'テキストボックスのスクロールバー解除
TextBox1.ScrollBars = fmScrollBarsNone
'トグルボタン3のキャプション変更
ToggleButton3.Caption = "スクロールバー(垂直・水平)表示"
End If
'スクロールバーを表示させる為に適当な文字と改行入力
.Text = "Sample" & vbLf _
& "ScrollBarプロパティ" & vbLf & vbLf & vbLf
'フォーカスをテキストボックスに移す
.SetFocus
End With
End Sub
◆ToggleButton4(複数行入力可否切り替え)
Private Sub ToggleButton4_Click()
'トグルボタン4クリック時の処理
' ⇒ボタンON/OFFで複数行入力可否を切り替え
With TextBox1
'トグルボタン4ON/OFF判定
If ToggleButton4.Value Then
'複数行入力「可」設定
' ⇒トグルボタン3で設定した垂直スクロールバー表示
.MultiLine = True
'トグルボタン4のキャプション変更
ToggleButton4.Caption = "複数行入力不可"
Else
'複数行入力「不可」設定
' ⇒トグルボタン3で設定した水平スクロールバー表示
.MultiLine = False
'トグルボタン4のキャプション変更
ToggleButton4.Caption = "複数行入力可"
End If
'フォーカスをテキストボックスに移す
.SetFocus
End With
End Sub
3.まとめ
ユーザーフォーム上でのテキストをどのように扱うかによってスクロールバーの要否は変わりますが、私の場合は設定して使うことが多いです。
今回のサンプルは設定ON・OFFでの視覚的な変化確認、及び垂直・水平でのスクロールバーと複数行入力設定の関係についてでした。設定ON/OFF自体はこのように簡単に扱えますので、機会があれば使ってみるのも良いかと思います。
以上、テキストボックスにスクロールバーを表示する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

