2016-05-11 13 views
1

Ich möchte ein Makro schreiben, um Zahlen zu finden und sie in einem Dokument umzukehren.
zum Beispiel konvertieren: 123456 zu 654321
ich dieses Makro, aber es funktioniert nicht schreiben:Umkehren von Zahlen im Dokument mit Makro

Function inverter(Numbers) 
Dim Num As Long 
Dim inverted As Long 
Num = Numbers 
Do Until Num >= 1 
    remainder = Num Mod 10 
    Num = Num/10 
    inverted = inverted * 10 + remainder 
Loop 
inverter = inverted 
End Function 
Sub invert() 
Dim a As Long 
    Selection.GoTo What = wdGoToLine, Which = wdGoToFirst 
    Selection.Find.ClearFormatting 
    Selection.Find.Replacement.ClearFormatting 
    With Selection.Find 
      .Text = "([!0-9])([0-9]@)([!0-9])" 
      .Replacement.Text = "\1" & a="\2" inverter(a) & "\3" 
      .Forward = True 
      .Wrap = wdFindContinue 
      .Format = False 
      .MatchCase = False 
      .MatchWholeWord = False 
      .MatchKashida = False 
      .MatchDiacritics = False 
      .MatchAlefHamza = False 
      .MatchControl = False 
      .MatchWildcards = True 
      .MatchSoundsLike = False 
      .MatchAllWordForms = False 
      .Execute Replace:=wdReplaceAll 
    End With 
End Sub 

Wenn ich es diesen Fehler kompilieren zurück:

--------------------------- 
Microsoft Visual Basic for Applications 
--------------------------- 
Compile error: 

Expected: end of statement 
--------------------------- 
OK Help 
--------------------------- 
+0

Debuggen Sie das Programm - verwenden Sie 'F8' Taste, um herauszufinden, welche Zeile Fehler verursacht! –

+2

'. Replacement.Text =" \ 1 "& a =" \ 2 "Wechselrichter (a) &" \ 3 "' Überprüfen Sie diese Zeile. Es scheint ein fehlendes '&' zu geben und ich denke nicht, dass 'a = "\ 2" 'auch funktionieren wird. Auch bitte nicht alle Aussagen in einer Zeile, es ist unmöglich zu lesen. – arcadeprecinct

+1

Zusatz zu meinem letzten Kommentar: 'a' und' Inverter' sollten wahrscheinlich geändert werden, um mit Strings umzugehen. 'a =" \ 2 "& Inverter (a)' funktioniert nicht, weil 'a =" \ 2 "' nicht ausgewertet wird, wenn der Text ersetzt wird, aber wenn der Ersetzungstext gesetzt ist, wird false zurückgegeben. '" \ 2 "& Inverter (" \ 2 ")' funktioniert auch nicht, weil 'Inverter ("\ 2") 'zum Zeitpunkt der Definition von replacement.text ausgewertet wird. Ich würde empfehlen, in reguläre Ausdrücke zu schauen und die Matches zu durchlaufen. – arcadeprecinct

Antwort

2

Diese Linie Sinn machen, nicht für ich

.Replacement.Text = "\1" & a="\2" inverter(a) & "\3" 

Es scheint wie eine Kombination von Zuordnung, logi cal Bewertung und "Fehler"

Ich bin nicht in der Lage, eine Batch-ersetzen-Lösung zu finden, wie Sie brauchen; so hier mein Vorschlag:

Ich änderte Ihre Invertor mit Strings statt zu arbeiten, weil Ihr Invertor1 für 1000 zurück statt 0001 (vielleicht ist dies nicht in Word RegEx betrachtet)

Function Inverter2(nb As String) As String 
    Dim bn As String 
    For i = 1 To Len(nb) 
     bn = Mid(nb, i, 1) & bn 
    Next i 
    Inverter2 = bn 
End Function 

Und hier ist Ihre invert geändert

Sub invert() 
Dim a As Long 
    Selection.GoTo What = wdGoToLine, Which = wdGoToFirst 
    Selection.Find.ClearFormatting 
    Selection.Find.Replacement.ClearFormatting 
    With Selection.Find 
      .Text = "([!0-9])([0-9]@)([!0-9])" 
      '.Replacement.Text = "\1" & a="\2" inverter(a) & "\3" 
      .Forward = True 
      '.Wrap = wdFindContinue 
      .Format = False 
      .MatchCase = False 
      .MatchWholeWord = False 
      .MatchKashida = False 
      .MatchDiacritics = False 
      .MatchAlefHamza = False 
      .MatchControl = False 
      .MatchWildcards = True 
      .MatchSoundsLike = False 
      .MatchAllWordForms = False 
      '.Execute Replace:=wdReplaceOne 
      While .Execute 
       Selection.Text = Inverter2(Selection.Text) 
      Wend 
    End With 
    Selection.GoTo What = wdGoToLine, Which = wdGoToFirst 
End Sub 

I entfernt .Wrap = wdFindContinue weil der Text zweimal invertiert werden so gehalten selbe

Ich entfernte auch Ihren Ersatz und ging eins nach dem anderen weiter.

+1

danke für Ihre Zeit, ich habe keinen Zugriff auf meinen PC jetzt, ich werde es morgen testen :) –

+0

testen Sie diese Datei [test.docx] (http://s000.tinyupload.com/index.php?file_id=93208893086428438387) Makro ** Entferne ** Zeile 2 –

+0

@ fabrice-lylian-tayou kannst du dieses Makro mit dieser Datei testen? –

Verwandte Themen