2016-05-11 4 views
1

数値を見つけて文書に逆変換するためのマクロを作成します。例えば
は変換:123456
654321に私はこのマクロ書くが、それは仕事をdoesntの:マクロを使用して文書内の数字を反転する

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 

私はそれがこのエラーを返すコンパイルすると:

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

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

プログラムをデバッグする - 'F8'キーを使用して、エラーの原因となっている行を見つけてください! –

+2

'.Replacement.Text =" \ 1 "&a =" \ 2 "インバータ(a)&" \ 3 "'この行を確認してください。 '&'が不足しているように思えますし、 'a =" \ 2 "'もうまくいくとは思わないのです。 また、すべてのステートメントを1行に入れないでください。読むことは不可能です。 – arcadeprecinct

+1

私の最後のコメントに加えて、おそらく文字列を扱うために 'a'と' inverter'が変更されるべきです。 'a =" \ 2 "'はテキストが置換されたときに評価されないので、置換テキストが設定されているのでfalseを返すので、 'a =" \ 2 "&inverter(a)'は動作しません。 replacement.textの定義時に 'inverter(" \ 2 ")'が評価されるため、 '' \ 2 "&inverter(" \ 2 ")'は動作しません。私は正規表現を調べて試合をループすることをお勧めします。 – arcadeprecinct

答えて

2

をこの行は、のために意味がありません。私

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

これは、割り当て、logi評価とエラーが発生する

必要に応じてバッチ置換ソリューションが見つかりません。だからここに私の提案:

私はあなたのInvertor1000代わりに0001ため1を返しますので、

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 

(おそらくこれは、Wordの正規表現では考慮されていない)、代わりに文字列で動作するようにあなたのInvertorを変更し、ここにありますあなたのinvertは、テキストがとてもまま2回反転されますので、私は.Wrap = wdFindContinueを削除

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 

を変更しました同じ

私もあなたの交換を取り除き、1つずつ進めました。

+1

あなたの時間をありがとう、私は今私のPCにアクセスしないで、私は明日それをテストします:) –

+0

このファイルをテスト[test.docx](http://s000.tinyupload.com/index.php?file_id=93208893086428438387)マクロ** remove ** line 2 –

+0

@ fabrice-lylian-tayouこのファイルでこのマクロをテストできますか? –

関連する問題