Sub codieren() ' codieren Makro ' codiert oder decodiert à la Vigenère mit frei wählbarem Schlüssel ' (c) Michael Kraus; 27. Juni 2003; Version 7 ' Kontakt: www.michael-kraus.info Dim y Dim i Dim x$ Dim x_ Dim a$ Dim b Dim c Dim code$ Rem Eine Dialogbox wird definiert: WordBasic.BeginDialog 550, 142, "Was wollen Sie tun?" WordBasic.Text 20, 9, 517, 13, "Bitte eine mindestens fünfstellige Zahl zum Verschlüsseln eingeben -" WordBasic.Text 20, 24, 391, 13, "- oder den bekannten Schlüssel zum Entschlüsseln." WordBasic.TextBox 20, 39, 160, 18, "key$" WordBasic.Text 20, 78, 271, 13, "Soll Klartext verschlüsselt werden?" WordBasic.Text 20, 93, 331, 13, "Oder soll Geheimtext entschlüsselt werden?" WordBasic.PushButton 20, 112, 120, 21, "verschlüsseln", "Knopf1" WordBasic.PushButton 192, 112, 120, 21, "entschlüsseln", "Knopf2" WordBasic.CancelButton 368, 112, 120, 21 WordBasic.EndDialog Rem Die Variablen der Dialogbox werden als "var(-iable)" definiert: Dim var_ As Object: Set var_ = WordBasic.CurValues.UserDialog Rem Sprungmarke wh: Rem Verarbeitung der "Abbrechen"-Schaltfläche: On Error GoTo ciao Rem Anzeigen des Dialogfeldes: Set var_ = WordBasic.CurValues.UserDialog WordBasic.Dialog.UserDialog var_ Rem Wenn der Schlüssel fehlt - zurück zur wh-Sprungmarke: If var_.Key$ = "" Then WordBasic.MsgBox "Bitte einen Schlüssel eintragen!", "Unvollständig!", 16 GoTo wh End If Rem Verarbeiten der Wahl: WordBasic.StartOfDocument Rem Irrtümliche Absatzmarken am Ende der Eingabe entfernen: var_.Key$ = WordBasic.[CleanString$](var_.Key$) Rem Irrtümliche Leerzeichen am Anfang der Eingabe entfernen: var_.Key$ = WordBasic.[LTrim$](var_.Key$) Rem Länge des Schlüssels ermitteln: y = Len(var_.Key$) Rem Index für das Durchlaufen des Schlüssels: i = 0 Rem MsgBox("Der Schlüssel " + var.key$ + " ist " + Str$(y) + " Zeichen lang.") Rem Solange das Ende des Dokuments nicht erreicht ist: While WordBasic.CmpBookmarks("\Sel", "\EndOfDoc") Rem Die Ziffern des Schlüssels werden per Index kreisförmig durchlaufen (eleganter mit MOD !): Rem If i = y Then i = 1 Else i = i + 1 i = (i Mod y) + 1 x$ = Mid(var_.Key$, i, 1) Rem Die indizierte Ziffer des Schlüssels wird zu einer Rechengröße: x_ = WordBasic.Val(x$) Rem aus = MsgBox("Aktuelle Position im Schlüssel = " + Str$(i) + " - weiter?", 4) Rem aus = MsgBox("Aktuelle Ziffer aus dem Schlüssel = " + Str$(x) + " - weiter?", 4) Rem If aus = 0 Then Goto ciao Rem Das erste Zeichen wird markiert: WordBasic.CharRight 1, 1 Rem Vermeidung der Codierung von Absatzmarken If WordBasic.[Selection$]() = Chr(13) Then WordBasic.CharRight 1 Else Rem Markierung als Variable a a$ = WordBasic.[GetBookmark$]("\Sel") Rem Ascii-Wert des markierten Zeichens (hier fehlt die kreisförmige Datenstruktur!): b = Asc(WordBasic.[Selection$]()) Rem Verschlüsselung entsprechend der anfänglichen Wahl (-1 = "OK"): If var_.Knopf1 = -1 Then c = b - x_ Rem Entschlüsselung entsprechend der anfänglichen Wahl: If var_.Knopf2 = -1 Then c = b + x_ Rem Einfügen des ver - / entschlüsselten Zeichens : WordBasic.Insert Chr(c) End If Wend If var_.Knopf1 = -1 Then code$ = "ver" Else code$ = "ent" WordBasic.MsgBox "Das Dokument wurde mit " + var_.Key$ + Chr$(32) + code$ + "schlüsselt (fertig nach " + Chr$(34) + "OK" + Chr$(34) + "). Sie sollten sich diesen Schlüssel gegebenenfalls notieren.", "Ende", 64 Rem Sprungmarke für zwei MsgBoxen im Makro (zu Testzecken): ciao: Rem Cursor wieder an den Anfang. WordBasic.StartOfDocument End Sub