Ah vielen Dank! Ich war mir vor allem im Unklaren bezüglich der Bildung des Nenners...
Bei der zweiten Aufgabe bin ich leider nicht so weit gekommen:
Ein Microsoft Word Dokument ist mit dem Custom UI Editor durch einen eigenen Custom Tab „Entschlüsseln“, der eine Custom Group „Code“ mit einem Button „Code eingeben“ beinhaltet, zu erweitern (siehe Bild rechts).
Der Button fragt beim Klick zunächst mittels einer InputBox (siehe Hinweise) vom Nutzer eine ganze positive Zahl ab. Diese Abfrage soll solange wiederholt werden, bis der Nutzer korrekt eine ganze positive Zahl (ab 1) eingegeben oder das Eingabefeld leergelassen bzw. die Eingabe abgebrochen hat. Bei ungültigen Eingaben (z.B. „abc“, -5 oder 1,23) erscheint die InputBox erneut.
Wurde die Eingabe leer gelassen oder abgebrochen, sollen keine weiteren Schritte erfolgen.
Falls aber eine Zahl korrekt eingegeben wurde, wird mit dieser Zahl als Parameter ein zu schreibendes Sub „decode“ aufgerufen, das folgende „Entschlüsselung“ des Textes vornimmt:
- Der gesamte Text des Dokumentes wird zu Beginn schwarz eingefärbt
- Der Text wird (wort- und) zeichenweise durchlaufen
- Es werden nur Buchstaben berücksichtigt. Satz-, Sonder- und Leerzeichen werden ignoriert
- Jeder Buchstabe, der an einer Position steht, die ein ganzzahliges Vielfaches der vom Nutzer eingegebenen Zahl darstellt, wird rot eingefärbt (siehe Beispiel)
- Alle diese Zeichen werden zudem zu einem Gesamtstring zusammengefaßt, der am Ende mit einer MsgBox komplett großgeschrieben ausgegeben wird
Hinweise:
Die Konstante für rot als Farbwert heißt xlRed, die für schwarz ist xlBlack.
Die Funktionen InStr, UCase, Mid, Trim und Len könnten hilfreich sein.
Mit einer InputBox können einfach Strings vom Nutzer mit einem kleinen Eingabefenster eingelesen werden. Der im Parameter angegeben Text wird dem Nutzer als Eingabeaufforderung angezeigt:
Dim userInput as String
userInput = InputBox("Bitte geben Sie einen Zeichenabstand ein (ganzzahlig und positiv):")
Beachtet beim Erstellen des Ribbons, dass die Callback-Funktionen (die bei onAction angegeben werden) keine Bindestriche oder Leerzeichen im Namen enthalten dürfen und alle unterschiedlich sein müssen!
Beispiel:
Im Text „Ein Theokrat verleiht Leos Kondor, weil der Bulle hält.“ sind zwei versteckte Codebegriffe enthalten. Nimmt man jedes 5. Zeichen, erhält man „HALLOWELT“ (rot hervorgehoben), nimmt man jedes 11. Zeichen, ist „TOLL“ die Lösung (grün hervorgehoben).
Option Explicit
'Callback for customButton onAction
Sub Callback(control As IRibbonControl)
Dim i As Integer
Dim userInput As String
While InStr(CStr(userInput, ",") = 0 And (userInput >= 0) Then and not (userInput = "")
If IsNumeric(userInput) Then
userInput = InputBox("Bitte geben Sie einen Zeichenabstand ein (ganzzahlig und positiv):")
End If
End while
Dim wort As Range
For Each wort In ActiveDocument.Words
Dim buchstabe As Range
Set buchstabe = ActiveDocument.Range
buchstabe.WholeStory
Dim pos As Integer
For pos = buchstabe.Start To buchstabe.End
buchstabe.Start = pos
buchstabe.End = pos + 1
buchstabe.Font.Color = wdColorBlack 'alles schwarz färben
Next
For Each wort In ActiveDocument.Words
Dim buchstabe As Range
Set buchstabe = ActiveDocument.Range
buchstabe.WholeStory
Dim pos As Integer
For pos = buchstabe.Start To buchstabe.End
buchstabe.Start = pos
buchstabe.End = pos + 1
If buchstabe.wert = Int(buchstabe.wert)*buchstabe.wert 'ganzzahliges Vielfaches
buchstabe.Font.Color = wdColorRed
Enf If
Next
'Fehler: Sub wurde nicht ausgelagert
MsgBox (UCase(ActiveDocument.Words)) 'Ausgabe der großgeschriebenen Strings
'Fehler: Es werden hier nur Strings ausgegeben, sondern alle Wörter im aktiven Dokument
End Sub
|