Google
 
Web このブログ

2005年05月16日

太字のメッセージボックス

MSACCESS
「メッセージが読みづらいので、文字を大きくして欲しい!」
と要望されたことはありませんか。

残念ながら、AccessMsgBox関数では文字の大きさは変更できません。
ただし、MsgBoxの文字を太く表示することは可能です。

Access97が使える方は、試しに以下のコードを実行してみてください。
(表示したいメッセージの後ろに、半角で@,スペース,@

	MsgBox ("こんにちは@ @") 

メッセージが太くなったのが分かるかと思います。

どういう仕組みかというと、MsgBox関数のメッセージはアットマーク(@)で3つのセクションに区切ることができます。
すると1セクション目は太文字になりますので、2、3セクション目を指定しなければ、太文字だけのメッセージように見えます。
これはエラーメッセージを表示するために用意された書式のようです。

ところが、Access2000以降のMsgBox関数は仕様変更されていて、そのまま"@ @"が文字として出てしまいます。
 
これを回避して、太文字を表示するには、MsgBox関数の構文全体をEval関数の引数として実行します。
つまり、こんなコードなります。
(メッセージはシングルクォーテーション囲みなので注意)

	Call Eval ("MsgBox ('こんにちは@ @')") 

この場合、ボタン等を指定する引数に定数が使えないので、実値を使用する必要があります。

	Call Eval("MsgBox('この情報によりお客様の問題は解決しましたか?@ @',52)")

とまあ、上記のようにすれば、太文字表示は可能なのですが、Evalをかますのはややこしくなりますので、簡単に使えるようにラッピングした関数を紹介します。


◇メッセージを太字で表示するMsgBoxEx()

引数はMsgBox()と全く同じですので、説明を省きます。

-------------- サンプルコード 1--------------
Public Function MsgBoxEx _
(pPrompt As Variant, Optional pButtons As Long = vbOKOnly, _
Optional pTitle As Variant, Optional pHelpfile As Variant, _
Optional pContext As Variant) As Variant

Dim tmpText As String

tmpText = "'" & pPrompt & "@ @'," & pButtons

If Not IsMissing(pTitle) Then
tmpText = tmpText & ",'" & pTitle & "'"
End If

If Not IsMissing(pHelpfile) Then
tmpText = tmpText & ",'" & pHelpfile & "'"
End If

If Not IsMissing(pContext) Then
tmpText = tmpText & "," & pContext
End If

MsgBoxEx = Eval("MsgBox(" & tmpText & ")")

End Function


既存のプログラムコードで、MsgboxMsgBoxEXに置換してしまえば、そのまま利用することができます。


また、Access2002以降であれば、隠し関数WizMsgBox()を呼び出して、"@ @"とセクションで区切る方法で、太文字メッセージボックスが利用できます。

◇非公開メソッド WizHook.WizMsgBox()

WizHookAccess2000以降に存在する非公開メソッドで、そのままでは動作しませんが、
キーを有効化することで使用可能になります。
WizHookについては別エントリで後述します。

以下がWizMsgBoxの引数です。
(省略はできません。引数の順番もMsgBoxとは異なるので注意)

Function WizMsgBox(bstrText As String, _
bstrCaption As String, _
wStyle As Long, _
idHelpID As Long, _
bstrHelpFileName As String) As Long

これを使用するには、次のサンプルコードのように記述します。

-------------- サンプルコード 2--------------
Function Sample()
 WizHook.Key = 51488399
 Call WizHook.WizMsgBox("こんにちは@ @", "サンプル", vbOKOnly, 0, "")
 WizHook.Key = 0
End Function

これで太文字で警告メッセージをバンバン出してしまいましょう。 ^ω^
それでも、「太くじゃなく大きくしてくれ!」と要望されたら、
メッセージボックスに似せたフォームを作って対応してください。。。。


このネタが役に立ったらポチッとな→人気blogランキングへ

 
posted by Picaso at 00:12 | Comment(5) | TrackBack(0) | MS Access - Tips
この記事へのコメント
@…
Ac2000以降でもマクロの「メッセージボックス」で
「メッセージ」に記述すると有効のようです。

どういう仕組みかは分かりませんが...orz
Posted by クロ at 2005年05月16日 12:09
ろでむがPicasoのメッセージへ表示したいなぁ。
Posted by BlogPetの「ろでむ」 at 2005年05月16日 14:35
>クロさん
おひさしぶりです。
私も正確なとこは知りませんが、
MsgboxにはAccess専用仕様と、Excel,WordのVBAと共用仕様があるみたいで。
マクロのメッセージボックスはAccess仕様のMsgBoxを使うんでしょうね。
Office2000からモジュールがVBEで統一された関係でしょうか。。。
Posted by Picaso at 2005年05月16日 22:38
ご無沙汰してます。Picasoさん
#と言いつつほぼ毎日このプログは覗いています。

>マクロのメッセージボックスはAccess仕様の
>MsgBoxを使うんでしょうね。

ほーなるほど、そういうわけですか。

>VBEで統一された関係
これについても思い当たる節あり...
テキストボックスの書式で色指定するとき
Ac97では[Red]とするところ、Ac2002(2000は持って
ない)では[赤]と書くようになってました。
#Excelの書式は以前から[赤]と書く

Posted by クロ at 2005年05月17日 08:38
>クロさん
毎度どうもです。
そういえば色書式っていつの間にか[Red][赤]ですり替わってましたね。
あれも2Kからだったのか。。
Posted by Picaso at 2005年05月18日 00:26
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのTrackBack URL

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。