2014/01/20

Outlook 環境依存文字をチェックしたい



こんにちは!メールすると大体文字化けしているtknriaです!


文字化けの原因となっているのは「環境依存文字」「機種依存文字」で、

・(株)が一文字になったもの
・半角カタカナ
・キロ、kmなどの単位が一文字になったもの

などがあります。


メールが普及し始めた頃は、バイト数によって通信費も変わっていたので、こういった文字が重宝されました。

しかし、パケット定額が常識となった今では、ただ文字化けの原因でしかありません。


そこで、メールを作ったときに環境依存文字を使っていないかをチェックするマクロを実装しちゃいましょう!



■ 環境依存文字をチェック!


Outlookは、半角カタカナを自動で全角に変換してくれるので、半角カタカナはチェックする必要はありません。

今回は、それ以外の文字をチェックする機能を、VBAで実装します。


'----- 以下、ソース -----

Public Sub CheckNotJIS()
    Dim checkMail As MailItem
    Dim strBody As String
    Dim char As String
    Dim code_char As Integer
    Dim i As Integer
    Dim strNotJIS As String
    Dim strUnicode As String

    If TypeName(ActiveWindow) = "Inspector" Then
        Set checkMail = ActiveInspector.CurrentItem
    Else
        Set checkMail = ActiveExplorer.Selection(1)
    End If
   
    strBody = checkMail.Body
   
    For i = 1 To Len(strBody)
        char = Mid(strBody, i, 1)
        code_char = Asc(char)
        If code_char < 0 Then
            If code_char < &H8140 Or (code_char >= &H8740 And code_char < &H889F) Or code_char >= &HEB40 Then
                strNotJIS = strNotJIS & char
            ElseIf code_char >= &HA1 Then
                strNotJIS = strNotJIS & char
            ElseIf code_char = &H3F And char <> "?" Then
                strUnicode = strUnicode & char
            Else
            End If
        Else
        End If
    Next i
   
    If strNotJIS = "" And strUnicode = "" Then
    Else
        MsgBox ("以下の文字が含まれています。" & vbCrLf & _
                " 機種依存文字:" & strNotJIS & vbCrLf & _
                "  Unicode文字:" & strUnicode)
    End If
End Sub

'----- 以上、ソース -----


これをボタンに割り当てれば、送信前にチェックすることができます。


さらに、送信時に自動でチェックして、環境依存文字が含まれていれば送信を取り止めるようにするには、以下のように変更します。


'----- 以下、ソース -----

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    ' 機種依存文字をチェック
    Call CheckNotJIS(Item, Cancel)
End Sub


Public Sub CheckNotJIS(ByVal objItem As Object, boolCancel As Boolean)
    Dim strBody As String
    Dim char As String
    Dim code_char As Integer
    Dim i As Integer
    Dim strNotJIS As String
    Dim strUnicode As String
   
    strBody = objItem.Body
   
    For i = 1 To Len(strBody)
        char = Mid(strBody, i, 1)
        code_char = Asc(char)
        If code_char < 0 Then
            If code_char < &H8140 Or (code_char >= &H8740 And code_char < &H889F) Or code_char >= &HEB40 Then
                strNotJIS = strNotJIS & char
            ElseIf code_char >= &HA1 Then
                strNotJIS = strNotJIS & char
            ElseIf code_char = &H3F And char <> "?" Then
                strUnicode = strUnicode & char
            Else
            End If
        Else
        End If
    Next i
   
    If strNotJIS = "" And strUnicode = "" Then
    Else
        MsgBox ("以下の文字が含まれるため送信を中止します。" & vbCrLf & _
                " 機種依存文字:" & strNotJIS & vbCrLf & _
                "  Unicode文字:" & strUnicode)
        boolCancel = True
    End If
End Sub

'----- 以上、ソース -----


これでもう文字化けに悩まされて眠れない日々とはサヨナラですね!



■ 億劫なあとがき


署名に、環境依存文字verの「(株)」を使っている人には、修正を促したほうが良いです。

また、フリーのメーリングリストを多用する場合は、特に導入しておいたほうが良いですね。