[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『MsgBoxの文字を太字表示したい』(YAAR)
VBAに関して
MsgBoxで表示する文字を太字にすることは出来ますか?
バージョン.Excel2000
MsgBox はフォントの設定はできないと思います。 文字のサイズ、色、フォント を変更したい場合は同様の機能をフォームで作成すれば 似たような機能は実装できるとは思います。 (Mook)
Mookさんの仰るように、ユーザーフォームで作成するのが簡単だと思いますよ!!
私もきっかけは忘れましたが、文字の変更が出来るようなMsgboxっぽいものを つくってあります。少しづつ機能追加して今は、以下のようになっています。
新規ブックにて試してください。 ユーザーフォームを一つ作成してください(UserForm1)。 このUserForm1に配置するコントロールは、コードで作成しますから、何も配置しないで ください。
上記のUserForm1のモジュールに
'============================================================= Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public btn_id As Long Public lbl As MSForms.Label Public WithEvents btn1 As MSForms.CommandButton Public WithEvents btn2 As MSForms.CommandButton Public blink As Boolean '============================================================= Private Sub btn1_Click() btn_id = 0 Me.Hide blink = False End Sub '============================================================= Private Sub btn2_Click() btn_id = 1 Me.Hide blink = False End Sub '============================================================= Private Sub UserForm_Activate() Dim fcl As Long DoEvents With lbl fcl = .ForeColor Do While blink = True .ForeColor = .ForeColor Xor (.BackColor Xor fcl) Sleep 500 DoEvents Loop End With End Sub '============================================================= Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then Cancel = True End If End Sub
標準モジュールに実際に呼び出す mymsgbox関数
'======================================================================= Function mymsgbox(mes As String, Optional fnsz As Long = 11, Optional fcl As Long = 0, _ Optional blink As Boolean = False, _ Optional ByVal boxtype = 0, _ Optional ByVal myleft = 0, _ Optional ByVal mytop = 0, _ Optional b1cap As String = " OK ", _ Optional b2cap As String = "Cancel") As Long 'input :mes ---表示文字列 ' fnsz ---文字サイズ ' fcl ---文字の色(RGB) ' blink ---True、点滅あり,false点滅なし ' boxtype - 0--「OK」ボタンのみ 1--「OK」「CANCEL」 ' myleft 水平位置 mytop 垂直位置 ' b1cap ----ボタン1のCaption(規定値 「OK」) ' b2cap ----ボタン2のCaption(規定値 「Cancel」) 'output :mymsgbox 押されたボタンを返す ' ok--0 cancel--1 Dim lbl As MSForms.Label Dim btn1 As MSForms.CommandButton Dim btn2 As MSForms.CommandButton Load UserForm1 With UserForm1 .Caption = "メッセージ" .StartUpPosition = 0 .top = mytop .left = myleft Set lbl = .Controls.Add("Forms.Label.1") With lbl .top = 10 .left = 10 .Caption = mes .Width = Len(mes) * fnsz .Font.Size = fnsz .AutoSize = True .ForeColor = fcl End With Set .lbl = lbl Set btn1 = .Controls.Add("Forms.CommandButton.1") With btn1 .Caption = b1cap .top = lbl.top + lbl.Height + 10 .AutoSize = True End With Select Case boxtype Case 0 .Width = Application.Max(lbl.left + lbl.Width + 30, btn1.left + btn1.Width + 20) .Height = btn1.top + btn1.Height + 30 btn1.left = .Width / 2 - btn1.Width / 2 Set .btn1 = btn1 Case 1 Set btn2 = .Controls.Add("Forms.CommandButton.1") With btn2 .Caption = b2cap .top = lbl.top + lbl.Height + 10 .AutoSize = True End With btn1.Width = Application.Max(btn1.Width, btn2.Width) btn2.Width = btn1.Width .Width = Application.Max(lbl.left + lbl.Width + 10, btn1.left + btn1.Width + 4 + btn2.Width + 20) .Height = btn1.top + Application.Max(btn1.Height, btn2.Height) + 30 btn1.left = .Width / 2 - btn1.Width - 2 btn2.left = .Width / 2 + 2 Set .btn1 = btn1 Set .btn2 = btn2 End Select .blink = blink .Show mymsgbox = .btn_id Unload UserForm1 End With End Function
使用例 別の標準モジュールに
'================================================================= Option Explicit Sub samp1() Dim ans As Long ans = mymsgbox("あなたの職業は ?", , , , 1, 100, 100, "体力勝負の仕事です", "知力勝負の仕事です") If ans = 0 Then ans = mymsgbox("それは、危険な仕事ですか?", , , , 1, 100, 100, "命がかかっています", "まあ安全です") If ans = 0 Then mymsgbox "ご苦労様です。就労者の鏡です", 36, RGB(255, 0, 0), True, 0, 100, 100 Else mymsgbox "そんな仕事が一番良いですね", 36, , , , 100, 100 End If Else ans = mymsgbox("デスクワークの時間は?", , , , 1, 100, 100, "平均16時間です", _ "まあ、2時間です。" & vbCrLf & "後は、" & vbCrLf & "うまく時間をつぶしています") If ans = 0 Then mymsgbox "ご苦労様です。プログラマみたいですね", 36, RGB(0, 0, 255), True, 0, 100, 100 Else mymsgbox "その仕事紹介して〜", 36, , , , 100, 100 End If End If End Sub
文字サイズや色やブリンクの指定が可能になっていますから、 太字というパラメータ追加出来ると思います。
ichinose
YAAR
VBA作ってごはん食べてる人間なのに、今さらながら、 メッセージボックスの色や大きさ、太字指定はできないのか!? と、調べていて行き着きました。
# メッセージを'@'で繋げれば、1行目は太字になる、、ということが いくつかのページで書かれていたものの私がやるとNG。何故???
それはともかく。 楽しませて貰いました(^^) >ichinose さん
オブジェクトを可変にするのはやったことないとは言いませんが、 ここまでしていると感動ものです。
第一、サンプルがいい!! ありがとうございます。
発言の際は署名やタイトルなどルールを守っていただきたいですが、 VBA にもまだまだ知らないことが多いですね。
検索してみましたが下記の情報でしょうか。 http://support.microsoft.com/kb/242889/ja だいぶ古い情報なので、機械翻訳もひどいものですが、どうも Access での お話のようですね。 (Mook)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.