[[20110220073103]] 『MsgBoxの文字を太字表示したい』(YAAR) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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.