ユーザーフォームにスクロールバーを表示(追加)して、ユーザーフォームをスクロールできるようにする方法についてご説明します。
スクロールバーを表示する方法はユーザーフォームのプロパティで指定するか、コントロールのスクロールバーを設置する方法になりますが、今回はコントロールではなくプロパティで表示させる方法になります。
VBAで表示する方法と、手動でプロパティを指定して表示する方法の2つについて、それぞれ記載します。
ユーザーフォームにいろいろ設置した結果、ユーザーフォームのサイズが大きくなりすぎてしまった場合に、サイズをWindow画面に収まるように設定したい場合などに使用すると便利です。
その他のユーザーフォームの操作については下記記事をご覧ください。
- ユーザーフォームのサイズを変更する
- ユーザーフォームの背景色を変更する
- ユーザーフォームのプロパティ一覧と表示方法
- ユーザーフォームを閉じる方法
- ユーザーフォームを×ボタンで閉じれないようにする
- ユーザーフォームにコントロールを追加する方法
- コントロールの数と名前と種類を取得する
1.手動でスクロールバーを表示する
まずはユーザーフォームのプロパティを手動で指定する方法です。
プロパティを手動で指定する方法
プロパティを手動で指定してスクロールバーを表示する方法は、まず作成してあるユーザーフォームモジュールを開きます。
ユーザーフォームモジュールを開いたら、ユーザーフォームのプロパティの「ScrollBars」で垂直方向、水平方向、両方のどれかを指定します。
ScrollBarsの設定一覧
設定値 | 説明 |
0-fmScrollBarsNone | スクロールバーを表示しません。 |
1-fmScrollBarsHorizontal | 水平スクロールバーを表示します。 |
2-fmScrollBarsVertical | 垂直スクロールバーを表示します。 |
3-fmScrollBarsBoth | 水平スクロールバーと垂直スクロールバーの両方を表示します。 |
スクロールバーを表示させましたが、実はまだスクロール出来ません。
図を見るとまだ、バーしかありません。
そこで、スクロールできる範囲や初期位置の指定などを行う必要があります。
また注意点として、設定する際にそもそもユーザーフォームの高さや幅より小さい数字を指定した場合は、スクロールの表示外領域の移動ができません。
さらにユーザーフォームモジュールでスクロールバーの範囲を設定した後に、位置を移動した状態で保存すると、移動した状態で開きます。
では、スクロールバーを表示したら、次はスクロールバーの設定を行います。
スクロールバーの設定
スクロールバーはプロパティでいくつか設定する事ができますので、プロパティの説明です。
水平方向、垂直方向、両方と表示するスクロールバーによって指定するプロパティの設定が変わります。
水平、垂直どちらかであれば「ScrollHeight」か「ScrollWidth」で良いですが、両方表示する場合は、どちらも指定します。
次のようにユーザーフォームのサイズが高さ100、幅300であれば、スクロールの高さと幅はそれ以上でなければいけません。
これでユーザーフォームのサイズ以上の表示領域の設定ができました。
プロパティの詳細です。
ScrollHeight
垂直スクロールバーのスクロールできる範囲をポイント単位で指定します。
ScrollLeft
水平スクロールバーの水平方向にスクロールされている位置を、フォームの左端からポイント単位で取得または設定できます。
ScrollTop
垂直スクロールバーの垂直方向にスクロールされている位置を、フォームの上端からポイント単位で取得または設定できます。
ScrollWidth
水平スクロールバーのスクロールできる範囲をポイント単位で指定します。
VBAでスクロールバーを表示する方法
次はVBAでユーザーフォームにスクロールバーを表示する方法です。
ユーザーフォームにスクロールバーが設置されていない状態から、VBAでスクロールバーを表示して設定します。
VBAでユーザーフォームにスクロールバーを表示する指定は「ScrollBars」プロパティで指定します。
次の様に記述します。
Object.ScrollBars = 設定
設定には値でも、定数でもどちらでも構いません。
ScrollBarsの定数
定数名 | 値 | 説明 |
fmScrollBarsNone | 0 | スクロールバーを表示しません。 |
fmScrollBarsHorizontal | 1 | 水平スクロールバーを表示します。 |
fmScrollBarsVertical | 2 | 垂直スクロールバーを表示します。 |
fmScrollBarsBoth | 3 | 水平スクロールバーと垂直スクロールバーの両方を表示します。 |
サンプルコード
スクロールバーを表示する
次のコードは垂直と水平の両方を表示します。
「fmScrollBarsBoth」と記述していますが、「3」と値で記述しても構いません。
Sub Sample2()
With UserForm1
.ScrollBars = fmScrollBarsBoth’垂直、水平両方を表示
.Show vbModeless
End With
End Sub
高さと幅を設定する
次は高さと幅を設定します。
高さを「ScrollHeight 」幅を「ScrollWidth 」で指定します。
Sub Sample3()
With UserForm1
.ScrollBars = fmScrollBarsBoth
.ScrollHeight = 400 '高さ
.ScrollWidth = 800 '幅
.Show vbModeless
End With
End Sub
位置を指定する
スクロールバーの位置を指定する方法です。
垂直方向のTOP位置は「ScrollTop」、水平方向の左の位置は「ScrollLeft」で指定します。
Sub Sample4()
With UserForm1
.ScrollBars = fmScrollBarsBoth
.ScrollHeight = 400 '高さ
.ScrollWidth = 800 '幅
.ScrollTop = 50 'TOP
.ScrollLeft = 100 'LEFT
.Show vbModeless
End With
End Sub
開いたときに、水平、垂直方向ですでにスクロールされた状態になりました。