3

私の迷惑メールフォルダは、キリル文字のように見えるもので構成されたメッセージでいっぱいになっています。メッセージ本文またはメッセージの件名がキリル文字である場合、それを完全に削除したいと思います。

画面にキリル文字が表示されますが、Outlook内でVBAのメッセージを繰り返すと、メッセージの「件名」プロパティに疑問符が返されます。

メッセージの件名がキリル文字であるかどうかを確認するにはどうすればよいですか?

(注:「InternetCodepage」プロパティを調べました。通常は西ヨーロッパです。)

4

3 に答える 3

3

VB/VBAのStringデータ型は Unicode 文字を処理できますが、IDE 自体はそれらを表示するのに問題があります (したがって、疑問符が表示されます)。

IsCyrillic私はあなたを助けるかもしれない関数を書きました。この関数は単一の引数を取り、文字列に少なくとも 1 つのキリル文字が含まれている場合にString戻ります。Trueこのコードを Outlook 2007 でテストしたところ、問題なく動作するようです。それをテストするために、件名にキリル文字のテキストを含むいくつかの電子メールを自分宛に送信し、テスト コードが受信トレイ内の他のすべての中からそれらの電子メールを正しく選択できることを確認しました。

したがって、実際には 2 つのコード スニペットがあります。

  • IsCyrillic関数を含むコード。これは、新しい VBA モジュールにコピー アンド ペーストするか、既存のコードに追加することができます。
  • Testコードが実際に機能することをテストするために (Outlook VBA で) 作成したルーチン。関数の使用方法を示しIsCyrillicます。

コード

Option Explicit

Public Const errInvalidArgument = 5

' Returns True if sText contains at least one Cyrillic character'
' NOTE: Assumes UTF-16 encoding'

Public Function IsCyrillic(ByVal sText As String) As Boolean

    Dim i As Long

    ' Loop through each char. If we hit a Cryrillic char, return True.'

    For i = 1 To Len(sText)

        If IsCharCyrillic(Mid(sText, i, 1)) Then
            IsCyrillic = True
            Exit Function
        End If

    Next

End Function

' Returns True if the given character is part of the Cyrillic alphabet'
' NOTE: Assumes UTF-16 encoding'

Private Function IsCharCyrillic(ByVal sChar As String) As Boolean

    ' According to the first few Google pages I found, '
    ' Cyrillic is stored at U+400-U+52f                '

    Const CYRILLIC_START As Integer = &H400
    Const CYRILLIC_END  As Integer = &H52F

    ' A (valid) single Unicode char will be two bytes long'

    If LenB(sChar) <> 2 Then
        Err.Raise errInvalidArgument, _
            "IsCharCyrillic", _
            "sChar must be a single Unicode character"
    End If

    ' Get Unicode value of character'

    Dim nCharCode As Integer
    nCharCode = AscW(sChar)

    ' Is char code in the range of the Cyrillic characters?'

    If (nCharCode >= CYRILLIC_START And nCharCode <= CYRILLIC_END) Then
        IsCharCyrillic = True
    End If

End Function


使用例

' On my box, this code iterates through my Inbox. On your machine,'
' you may have to switch to your Inbox in Outlook before running this code.'
' I placed this code in `ThisOutlookSession` in the VBA editor. I called'
' it in the Immediate window by typing `ThisOutlookSession.TestIsCyrillic`'

Public Sub TestIsCyrillic()

    Dim oItem As Object
    Dim oMailItem As MailItem

    For Each oItem In ThisOutlookSession.ActiveExplorer.CurrentFolder.Items

        If TypeOf oItem Is MailItem Then

            Set oMailItem = oItem

            If IsCyrillic(oMailItem.Subject) Then

                ' I just printed out the offending subject line '
                ' (it will display as ? marks, but I just       '
                ' wanted to see it output something)            '
                ' In your case, you could change this line to:  '
                '                                               '
                '     oMailItem.Delete                          '
                '                                               '
                ' to actually delete the message                '

                Debug.Print oMailItem.Subject

            End If

        End If

    Next

End Sub
于 2008-10-16T03:17:52.857 に答える
0

あなたはすでに簡単な解決策を持っているように私には思えます-(たとえば)5つの疑問符が含まれている件名を探してください

于 2008-10-15T23:10:08.720 に答える
0

メッセージの「Subject」プロパティは、一連の疑問符を返します。

古典的な文字列エンコーディングの問題。そのプロパティはASCIIを返しているように聞こえますが、UTF-8またはUnicodeが必要です。

于 2008-10-15T22:20:53.593 に答える