Frage

My Junk-Mail-Ordner wurde mit Nachrichten füllen komponiert, was scheint, das kyrillische Alphabet zu sein. Wenn ein Nachrichtentext oder eine Nachricht Thema in Kyrillisch ist, möchte ich es dauerhaft löschen.

Auf meinem Bildschirm sehe ich kyrillische Zeichen, aber wenn ich durch die Nachrichten in VBA in Outlook iterieren, die „Betreff“ Eigenschaft der Nachricht zurückgibt Fragezeichen.

Wie kann ich feststellen, ob der Betreff der Nachricht in kyrillischen Zeichen ist?

(Anmerkung: Ich habe die „Internetcode“ Eigenschaft untersucht habe - es ist in der Regel in Westeuropa).

War es hilfreich?

Lösung

Der String Datentyp in VB / VBA kann Unicode-Zeichen umgehen, aber die IDE selbst hat Probleme bei der Darstellung ihnen (daher die Fragezeichen).

Ich schrieb eine IsCyrillic Funktion, die Ihnen helfen kann. Die Funktion nimmt ein einziges Argument und gibt String True wenn die Zeichenfolge mindestens ein Zeichen enthält Kyrillisch. Getestet habe ich diesen Code mit Outlook 2007 und es scheint gut zu funktionieren. Um es zu testen, schickte ich ein paar E-Mails mit kyrillischen Text in der Betreffzeile und überprüft, dass mein Testcode richtig, diese E-Mails aus den Reihen alles andere in meinem Posteingang herausgreifen könnte.

Also, ich habe eigentlich zwei Code-Schnipsel:

  • Der Code, der die IsCyrillic Funktion enthält. Dies kann Kopie kleistert in ein neues Modul oder VBA hinzugefügt der Code, den Sie bereits haben.
  • Die Test Routine I (in Outlook VBA) geschrieben zu testen, dass der Code tatsächlich funktioniert. Es zeigt, wie die IsCyrillic Funktion verwenden.

Der Kodex

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


Beispiel Verwendung

' 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

Andere Tipps

  

die „Betreff“ Eigenschaft der Nachricht gibt eine Reihe von Fragezeichen.

Ein klassisches String-Codierung Problem. Klingt wie dieser Eigenschaft zurückgibt ASCII, aber Sie wollen UTF-8 oder Unicode.

Es scheint mir, Ihnen eine einfache Lösung haben bereits - für jeden Betreffzeile suchen nur mit (sagen wir) 5 Fragezeichen in es

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top