こんにちは!大阪市住之江区に拠点を置く会社『縁紡ぐ』の稲垣です。
当社は、Excel、ACCESS、RPAなどのシステム開発や既存ツールを使った業務効率化の提案、また、ITスキルアップのための教育に力を入れています。効率的なビジネス運営を目指している企業様、ITスキルの向上を図りたい企業や個人の方に、最適なご提案をさせていただきます。業務プロセスの改善とITスキルアップをサポートし、共に成長するパートナーでありたいと考えています。
メッセージボックスのフォントは変更することはできない
メッセージボックスとは、MsgBoxで表示することができるフォームのことです。
MsgBox "フォントの変更はできない"
結論、メッセージボックスはフォントの設定変更はできません。
って、ことで自作しちゃいましょう!(想定よりラベルの大きさ調整が大変でした💦)
自動サイズ調整を行うカスタムメッセージボックス
文字数に応じてメッセージボックスの大きさを変更しないと文字切れしてしまうので、対応する必要があります。それを踏まえて作成していきましょう!
本格的にカスタムしたメッセージボックス、OK、Yes/No、Yes/No/Cancelを選択できる作成方法は、下記の記事を参考してください。
メッセージボックス用のフォームを作成
追加したユーザーフォームにラベル(Label1)とボタン(CommandButton1)を追加
フォームにコードを追加
Private Sub CommandButton1_Click()
' ユーザーフォームを閉じる
Unload Me
End Sub
Public Sub ShowCustomMessageBox(ByVal message As String, Optional ByVal title As String = "メッセージ")
Dim maxWidth As Double
Dim labelPadding As Double
Dim buttonHeight As Double
Dim formPadding As Double
Dim textWidthValue As Double
Dim textHeightValue As Double
' 初期設定
maxWidth = 400 ' ラベルの最大幅
labelPadding = 10 ' ラベルの周囲に余白を追加
formPadding = 30 ' フォームのパディング(上下左右)
buttonHeight = Me.CommandButton1.Height
' フォントに基づいてテキストの幅と高さを計算
With Me.Label1
textWidthValue = GetTextWidth(message, .font)
textHeightValue = GetTextHeight(message, .font, IIf(textWidthValue + labelPadding * 2 > maxWidth, maxWidth, textWidthValue + labelPadding * 2))
.Caption = message
.WordWrap = True
.AutoSize = False
.width = IIf(textWidthValue + labelPadding * 2 > maxWidth, maxWidth, textWidthValue + labelPadding * 2)
.Height = textHeightValue + labelPadding
End With
' フォームのサイズを調整(フォームのパディングを考慮)
Me.width = Me.Label1.width + formPadding * 2
Me.Height = Me.Label1.Top + Me.Label1.Height + buttonHeight + formPadding * 2
' OKボタンの位置を調整
Me.CommandButton1.Top = Me.Label1.Top + Me.Label1.Height + 10
Me.CommandButton1.Left = (Me.width - Me.CommandButton1.width) / 2 - formPadding / 2
' フォームのタイトルを設定
Me.Caption = title
' フォームを表示
Me.show
End Sub
' テキストの幅を計算する関数
Private Function GetTextWidth(ByVal text As String, ByVal font As Object) As Double
' Label1を利用してテキスト幅を計算
Me.Label1.Caption = text
Me.Label1.AutoSize = True
GetTextWidth = Me.Label1.width
End Function
' テキストの高さを計算する関数
Private Function GetTextHeight(ByVal text As String, ByVal font As Object, ByVal width As Double) As Double
' Label1を利用してテキスト高さを計算
Me.Label1.Caption = text
Me.Label1.WordWrap = True
Me.Label1.width = width
Me.Label1.AutoSize = True
GetTextHeight = Me.Label1.Height
End Function
使用方法
使用方法は、フォーム名+メソッド名+引数(メッセージ内容の文字列, タイトルに表示する文字列)で、作成したメッセージボックス用のフォームを使うことができます。
UserFormMessage.ShowCustomMessageBox "非常に長いメッセージが表示される場合、ラベルとフォームのサイズが自動的に調整されます。", "テストメッセージタイトル"
見比べると文字の大きさが変わり、読みやすくなり、ボタンも大きくて押しやすくなったと思います。
まとめ
今回は、メッセージボックスを自作する方法をご紹介しました。なぜ、このようなメッセージボックスを作成したかというと、「標準のメッセージボックスだと文字が小さく見にくい」という、意見があったからです。
使い人の状況を考慮して、ユーザーインターフェースは改良する必要がありますよね。コストとパフォーマンスを天秤にかける必要はありますが。
ぜひ、この記事を活用して開発工数を減らしながらユーザーインターフェースの向上をしてくださいね!
稲垣
- Excel、ACCESSでのシステム開発が得意
- ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
- 自家焙煎するほどのコーヒー好き
- 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
- 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント