Guten Tag,
folgende Aufgabenstellung:
Ein Microsoft Word Dokument ist mit dem Custom UI Editor durch einen eigenen Custom Tab „Verschlüsselung“, der eine Custom Group „Verfahren“ mit zwei Buttons „Rot-13“ und „Invertierung“ beinhaltet, zu erweitern.
Wird einer der beiden Buttons angeklickt, so wird jeweils der gesamte Text des Dokumentes mit dem jeweiligen Verfahren verschlüsselt (siehe Hinweise). In die Verschlüsselung gehen dabei nur große und kleine Buchstaben ein. Alle anderen Zeichen wie Ziffern, Umlaute, Sonderzeichen und Leerzeichen bleiben unverändert erhalten.
Der erstellte verschlüsselte Text soll jeweils den bisherigen Text des Dokumentes vollständig ersetzen.
Beispiel: Der Dokumenttext ist „Toller Testtext mit 5 Wörtern“
Nach der Rot-13-Verschlüsselung ergibt sich: „Gbyyre Grfggrkg zvg 5 Jöegrea“
Nach der Invertierungs-Verschlüsselung ergibt sich: „Gloovi Gvhggvcg nrg 5 Döigvim“
Hinweise:
Beim Rot-13-Verfahren wird jeder Buchstabe um 13 Stellen im Alphabet verschoben. Kommt dabei ein Zeichen > Z heraus, fängt man wieder beim A an. Aus einem A wird so ein N, aus einem B ein O, aus einem M ein Z und aus einem N ein A usw. Entsprechend wird aus einem a ein n, aus einem b ein o usw.
Da das Alphabet 26 (also 2x 13) Buchstaben hat, stellt eine doppelte Rot-13-Verschlüsselung den Originaltext wieder her.
Beim Invertierungs-Verfahren wird aus einem A ein Z, aus einem B ein Y, aus einem C ein X usw. Entsprechend wird aus einem X ein C, aus dem Y ein B und aus dem Z ein A (genauso auch für Kleinbuchstaben).
Auch hier stellt eine zweifache Anwendung somit den Originaltext wieder her.
Die VBA-Funktion asc liefert zu einem Buchstaben den zugehörigen Zahlwert, auch ASCII-Code genannt. Großbuchstaben haben ASCII-Codes von 65 (A) bis 90 (Z), Kleinbuchstaben gehen von 97 (a) bis 122 (z).
Mit der VBA-Funktion chr kann ein ASCII-Code in das zugehörige Zeichen umgewandelt werden. Ein chr(65) liefert somit z.B. ein ‚A‘.
'Callback for customButton onAction
Sub Callback(control As IRibbonControl)
Dim Wort As Range
Dim s As Long
For Each Wort In ActiveDocument.Words
For s = 1 To Len(Wort)
If Asc(Mid(Wort, s, 1)) >= 65 And Asc(Mid(Wort, s, 1)) <= 90 Then
If Asc(Mid(Wort, s, 1)) <= 77 Then
'Replace?
'Wort=Replace(Wort,Mid(Wort, s, 1),Chr(Asc(Mid(Wort, s, 1)+13)))
Else
'Wenn Wert über 77 -> Wert+13-90+64
'Replace?
End If
ElseIf Asc(Mid(Wort, s, 1)) >= 97 And Asc(Mid(Wort, s, 1)) <= 122 Then
If Asc(Mid(Wort, s, 1)) <= 109 Then
'Replace?
Else
'Wenn Wert über 109 -> Wert+13-122+96
'Replace?
End If
End If
Next
Next
End Sub
Unter dem ersten "Replace?" habe ich mal dazugeschrieben was ich an der Stelle so vorhatte. Es funktioniert so nicht (überrascht hier wahrscheinlich niemanden). Was ist an meinem Versuch falsch und wie könnte ich das Vorhaben an den besagten Stellen umsetzen?
Vielen Dank im Voraus!
|