UserFormでテキストボックスやリストボックスを使ったフォームは作れても、「選んだファイルの画像をプレビュー表示したい」といった場面でImageコントロールの使い方が分からず止まってしまうことがあります。
この記事では、UserFormのImageコントロールに画像を表示する基本から、LoadPicture関数の使い方、画像のサイズ調整(PictureSizeMode)、ファイル選択ダイアログと組み合わせたプレビュー機能付きフォームの作り方まで解説します。
Imageコントロールの配置とプロパティの基本
まず、VBEのツールボックスからUserFormに「Image」コントロールをドラッグ&ドロップして配置します。名前は既定のまま Image1 として進めます。
画像を表示するには、Picture プロパティに画像データを設定します。設定方法は主に2つあります。
- あらかじめ画像をコントロールに埋め込んでおく(プロパティウィンドウの
Pictureから選択) - 実行時に
LoadPicture関数で外部ファイルを読み込む
実務でよく使うのは、実行時に任意の画像ファイルを読み込む後者のパターンです。
LoadPicture関数で画像を表示する
Private Sub UserForm_Initialize()
Dim picPath As String
picPath = "C:\Users\sample\Pictures\logo.jpg"
If Dir(picPath) <> "" Then
Me.Image1.Picture = LoadPicture(picPath)
Else
MsgBox "画像ファイルが見つかりません:" & picPath
End If
End Sub
LoadPicture(ファイルパス) を Image1.Picture に代入するだけで画像が表示されます。ファイルが存在しないパスを指定すると実行時エラーになるため、Dir 関数で事前に存在チェックをしておくと安全です。
画像の表示サイズを調整する:PictureSizeMode
読み込む画像の解像度はさまざまなので、コントロールの枠に対してどう表示するかを PictureSizeMode で指定します。
Private Sub SetImageSizeMode()
' 0:fmPictureSizeModeClip → 原寸のまま、枠からはみ出た部分は切り取る
' 1:fmPictureSizeModeStretch → 枠に合わせて縦横比を無視して引き伸ばす
' 3:fmPictureSizeModeZoom → 縦横比を保ったまま枠内に収まるよう拡大縮小
Me.Image1.PictureSizeMode = fmPictureSizeModeZoom
End Sub
縦横比を保ったまま画像全体をきれいに収めたい場合は fmPictureSizeModeZoom を使うのが最も自然に見えます。枠を画像ぴったりに埋めたい場合は fmPictureSizeModeStretch を使いますが、縦横比が崩れる点に注意してください。
ファイル選択ダイアログと組み合わせたプレビュー機能
ユーザーに画像ファイルを選ばせて、その場でプレビュー表示するフォームを作ってみます。UserFormに Image1(プレビュー用)と CommandButton1(「参照」ボタン)を配置します。
Private Sub CommandButton1_Click()
Dim filePath As Variant
filePath = Application.GetOpenFilename( _
FileFilter:="画像ファイル,*.jpg;*.jpeg;*.bmp;*.gif", _
Title:="プレビューする画像を選択してください")
If filePath = False Then Exit Sub
On Error GoTo LoadError
Me.Image1.PictureSizeMode = fmPictureSizeModeZoom
Me.Image1.Picture = LoadPicture(CStr(filePath))
Me.Label1.Caption = filePath
Exit Sub
LoadError:
MsgBox "画像を読み込めませんでした。対応形式を確認してください。"
End Sub
GetOpenFilename で選択したパスをそのまま LoadPicture に渡すことで、選んだ瞬間に Image1 へプレビュー表示されます。LoadPicture はBMP・JPEG・GIF・ICOなど一部の形式しか正しく読み込めないため、On Error GoTo で読み込み失敗時のエラーをキャッチしておくと安心です。
画像をクリア(非表示)にする
表示中の画像を消したい場合は、LoadPicture を引数なしで呼び出して空の画像を設定します。
Private Sub ClearImage()
Set Me.Image1.Picture = LoadPicture("")
End Sub
Picture プロパティはオブジェクトのため、代入には Set キーワードが必要です。単純に空文字を代入しようとするとエラーになるので注意してください。
複数の画像をサムネイルのように切り替える
フォルダ内の画像を一覧から選んで切り替え表示する例です。リストボックスと組み合わせています。
Private Sub ListBox1_Click()
Dim folderPath As String
folderPath = "C:\Users\sample\Pictures\products\"
Dim fileName As String
fileName = Me.ListBox1.Value
If fileName = "" Then Exit Sub
Dim fullPath As String
fullPath = folderPath & fileName
If Dir(fullPath) = "" Then
MsgBox "ファイルが見つかりません:" & fullPath
Exit Sub
End If
Me.Image1.PictureSizeMode = fmPictureSizeModeZoom
Me.Image1.Picture = LoadPicture(fullPath)
End Sub
リストボックスに商品ファイル名を並べておき、クリックされた項目に対応する画像をその都度読み込んで切り替えています。商品一覧の確認フォームなどにそのまま応用できます。
まとめ
UserFormのImageコントロールを使いこなせると、画像を使ったフォームの表現の幅が大きく広がります。
- 実行時に画像を表示するには
Image1.Picture = LoadPicture(ファイルパス)を使う - 表示サイズの調整は
PictureSizeMode(Clip・Stretch・Zoom)で指定する - ファイルが存在しない・非対応形式の場合に備えて、
Dirによる存在チェックやOn Errorでのエラー処理を組み込む - 画像を消す場合は
Set Image1.Picture = LoadPicture("")を使う(Setを忘れずに)
GetOpenFilenameによるファイル選択と組み合わせれば、プレビュー機能付きの実用的なフォームが簡単に作れます。ぜひ自作フォームに取り入れてみてください。


コメント