Officeのヴァージョンによって処理を切り替える

Officeのヴァージョンに合わせて煽る

私は、別に玄人でも何でもないので、自作のツールに煽りAAを入れる。

中でも気に入っているのが、有名な「ち~んw」のやつw

    _________
 /         \ 
/ /・\  /・\  \
|    ̄ ̄    ̄   | ち~んw
|    (_人_)   |
|     \   |      |
\      \_|   /

ただ、こいつをメッセージボックスで表示しようとすると、Officeのヴァージョンによってフォントの種類が違うので、表示が崩れる。

この問題に真剣に取り組んだ。

対応

簡単なことで、ApplicationオブジェクトのVersionプロパティで判定すりゃいい。

コーディング

まずは、宣言セクションでAAの部分を定数にしておく。

リスト1 標準モジュールの宣言セクション
Public Const MAKE_USER_SICK_2013 As String = _
              "       _______" & vbCrLf & _
              "   /       \" & vbCrLf & _
              "/ /・\  /・\ \" & vbCrLf & _
              "|   ̄ ̄    ̄ ̄   |   ち~んw" & vbCrLf & _
              "|    (_人_)   |" & vbCrLf & _
              "|     \  |   |" & vbCrLf & _
              "\     \_|  /"

Public Const MAKE_USER_SICK_2010 As String = _
              "     _______" & vbCrLf & _
              " /               \ " & vbCrLf & _
              "/ /・\  /・\     \" & vbCrLf & _
              "|   ̄ ̄    ̄         | ち~んw" & vbCrLf & _
              "|    (_人_)         |" & vbCrLf & _
              "|     \     |          |" & vbCrLf & _
              "\      \_|       /"

ちなみに、上が2013以降用で、下が2010用。2007とか2003でやったらどうなるのかは不明。だって、そんなヴァージョンのOfficeが身近にないんだもの。

んで、本体のコードが次のリスト2

スト2 標準モジュール
Public Sub makeUserSick(ByVal msg As String)    '……(1)'
  Dim ver As String
  ver = Application.Version    '……(2)'
  Dim str As String
  Select Case ver    '……(3)'
    Case "14.0"
      str = MAKE_USER_SICK_2010
    Case "15.0"
      str = MAKE_USER_SICK_2013
    Case "16.0"
      str = MAKE_USER_SICK_2013
    Case Else    '……(*)'
      str = MAKE_USER_SICK_2010
  End Select
  MsgBox msg & vbCrLf & str    '……(4)'
End Sub

簡単なコードなので説明不要と思うけれど、一応。

まず、(1)の

Public Sub makeUserSick(ByVal msg As String)

で、引数を1つ受け取るようにしている。

ここで受け取ったmsgプラス「ち~んw」AAで煽る、というわけ。

で、(2)の

ver = Application.Version

では、ApplicationオブジェクトのVersionプロパティを取得して変数verにぶち込んでいる。

例えば、Office2013なら、「15.0」が返ってくる。

従って、(3)からの10行

Select Case ver
  Case "14.0"
    str = MAKE_USER_SICK_2010
  Case "15.0"
    str = MAKE_USER_SICK_2013
  Case "16.0"
    str = MAKE_USER_SICK_2013
  Case Else    '……(*)'
    str = MAKE_USER_SICK_2010
End Select

では、変数verに格納された値に応じて呼び出す定数を変えている。

2016とか使ったことがないから、2013と同じ文字列を呼び出すようにしているけれど、ホントにこれで良いのかは不明w

また、(*)のところでは、2010でも2013でも2016でもなければ2010と同じ文字列を呼び出すようにしているけれど、これまたホントにこれで良いのかは不明w

あとは、(4)の

MsgBox msg & vbCrLf & str

で、引数で受け取った文字列と煽りAAをつなげ、メッセージボックスに表示する。

実行

次のコードで実行する。

リスト3 標準モジュール
Public Sub test()
  Call makeUserSick("ほげほげ")
End Sub

実行結果

f:id:akashi_keirin:20171126201234j:plain

Word2013上で実行したのでこうなる。

やっぱりむかつくw

私は、これらのコードをWdCommonと名付けた標準モジュールに書いて、いろんなWordドキュメントにインポートして使い回しているので、ユーザーがわけの分からん操作をしたときに煽る機能をカンタンに実装することができます。ははは。

@akashi_keirin on Twitter