Thema Datum  Von Nutzer Rating
Antwort
29.07.2021 18:36:31 Alexander
NotSolved
Blau Benutzerdefinierte Funktion "Spiegeln"
30.07.2021 01:48:38 Gast49632
Solved
30.07.2021 02:23:40 Gast16871
NotSolved
30.07.2021 02:39:33 Gast49632
NotSolved
03.08.2021 18:51:14 Alexander
NotSolved

Ansicht des Beitrags:
Von:
Gast49632
Datum:
30.07.2021 01:48:38
Views:
245
Rating: Antwort:
 Nein
Thema:
Benutzerdefinierte Funktion "Spiegeln"

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.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
29.07.2021 18:36:31 Alexander
NotSolved
Blau Benutzerdefinierte Funktion "Spiegeln"
30.07.2021 01:48:38 Gast49632
Solved
30.07.2021 02:23:40 Gast16871
NotSolved
30.07.2021 02:39:33 Gast49632
NotSolved
03.08.2021 18:51:14 Alexander
NotSolved