VBAのMSGBOXのアイコンを用意する

VBAのMsgBoxを自作する上で困るのはアイコンです。
あ、いきなりなんだよと思った方はこちらからどうぞ。

MsgBoxは引数によって4種類(情報、警告、問い合わせ、注意)のアイコンを表示します。
ですが、いくらVBA上とはいえ勝手に使っていいものなのか??
ていうかそもそもMsgBoxを使わないならどこからこのアイコン取ってくれば??
調べてもわからないというか、望み薄そうだったので、大して調べずに商業用もOKのフリー素材からよく似たものを貰って来ました。

次にこのアイコンをどこに保持していようか、です。
自分がローカルで使うなら構いませんが、これはお仕事。ばら撒かれるソフトです。
しかもExcelファイル1ファイルをぺろっとばら撒きたいという前提です。
そこで、隠しシートにアイコンを設置しておき、起動時にキャプチャをとって隠しディレクトリに出力するって方法をとっていました。

が、これだと問題があって、

  • (jpegに保存するため) 画質が少々劣化する
  • ごく稀に出力されずに真っ白のアイコンになってしまう

なので、あまり大きな画像ではありませんし、隠しシート(Table_Icons)の4列にバイナリデータを列挙しておいて、これを画像ファイルとして隠しディレクトリに出力するようにしました。
呼び出し元はThisWorkbook.Workbook_Openです。

' nCol          アイコンのバイナリ情報が格納されている列
' strFileName   エクスポートする際のファイル名
Private Sub ExportIcon(nCol As Long, strFileName As String)
    Dim nRow As Long: nRow = 1
    Dim nFileNo As Long: nFileNo = FreeFile

    ' バイナリモードで開く
    Open "隠しディレクトリパス" & "\" & strFileName For Binary As #nFileNo
        ' データを書き出し
        Do While 1 <= Len(Table_Icons.Cells(nRow, nCol).value)
            Put #nFileNo, , CByte(Table_Icons.Cells(nRow, nCol).value)
            nRow = nRow + 1
        Loop
    ' 保存
    Close #nFileNo
End Sub

ThisWorkbook.Workbook_BeforeCloseで隠しディレクトリの削除も忘れずに。


他にもニッチなIT関連要素をまとめていますので、よければ一覧記事もご覧ください。

2件のコメント

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)