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件のコメント