Lösungsbeispiel:
Option Explicit
Sub Mirror_ByWords()
Dim rngWord As Word.Range
Set rngWord = ThisDocument.Content.Words(1)
Do Until rngWord Is Nothing
Call rngWord.MoveEndWhile(" " & vbCrLf, wdBackward)
If rngWord.Characters.Count > 1 Then
Call MirrorThat(rngWord)
End If
Set rngWord = rngWord.Next(wdWord)
Loop
End Sub
Sub Mirror_All()
Dim rngAll As Word.Range
Set rngAll = ThisDocument.Content
Call rngAll.MoveEndWhile(" " & vbCrLf, wdBackward)
If rngAll.Characters.Count > 1 Then
Call MirrorThat(rngAll)
End If
End Sub
Private Sub MirrorThat(ByVal Range As Word.Range)
Dim char As String * 1
Dim n As Long
Dim i As Long
Dim j As Long
i = 1
j = Range.Characters.Count
Do While i < j
char = Range.Characters(i).Text
Range.Characters(i).Text = Range.Characters(j).Text
Range.Characters(j).Text = char
i = i + 1
j = j - 1
Loop
End Sub
Grüße
PS: Der Fehler bei dir in Zeile 12 kommt, weil das Array nur deklariert, aber nicht initialisiert ist.
Anmerkung: Die Dimensionen eines Arrays sind immer ganze Zahlen, weshalb der Datentyp Double nicht so richtig Sinn ergibt; dieser steht für gebrochene Zahlen. Verwende stattdessen Long, Integer, oder Byte - man nimmt üblicherweise Long.
Möchtest du das mit einem Array umsetzen, dann hier ein Beispiel zu dem Prinzip:
Wir wollen das Array mit einer zuvor unbekannten Anzahl von Elementen erstellen - darum wird hier Do..Loop verwendet. Wir simulieren durch k = 15 diese "unbekannte Anzahl". Da wir die genaue Anzahl an Elementen nicht kennen, entscheiden wir uns als Anfang Platz für 10 Elemente zu reservieren und erweitern diesen, falls wir das müssen.
Sub Array_Beispiel()
Dim i As Long
Dim k As Long
Dim n As Long
n = 10
ReDim arr(1 To n) As Variant
k = 15 'Anzahl der zu generierten Beispielwerte (Do..Loop wird hierfür nur beispielhaft verwendet)
i = 1
Do While i <= k
If i > n Then
n = n + 10 '<- in der Praxis wird hier oftmals mit einem Wert zwischen 1.2 bis 1.5 multipliziert
ReDim Preserve arr(1 To n)
End If
arr(i) = i
i = i + 1
Loop
'jetzt kann man es auf die exakte Größe 'stutzen'
'(wenn man das möchte)
If i - 1 < n Then
ReDim Preserve arr(1 To i - 1)
End If
'Ausgabe (ggf. Menü » Ansicht » 'Direktfenster' einblenden):
Debug.Print "arr = {"; Join(arr, ", ") & "}"
End Sub
Warum man nicht immer um eins erhöht? -> Weil das sehr sehr seeeeehr auf die Laufzeit geht. Der neue Speicher muss jedesmal irgendwo zusammenhängend im Arbeitsspeicher gefunden, reserviert und belegt werden. Da ist es besser das seltener zu tun, d.h. in einem größerem Abstand.
|