-1
私は教授の本の著者と主題索引を作成しています。私はすでにMS Wordを使ってインデックスを作成しました。しかし今、私は実際の順序に変える必要がある各主語/著者の一連の連続番号を持っています。例えばのでWord数値シーケンスを数値範囲に変換するマクロ(例:1,2,3から1-3)
:
Agency (human and divine), 113, 114, 115, 339
ニーズ
Agency (human and divine), 113–115, 339
になるために、私が現在使用しているVBAコードはcode found hereの変形例です。元のコードの問題は、98-99のような二重引用符を見つけられなかったことです。代わりに、著者は以下の改訂コードを私に送った。この改訂コードの問題点は、インデックスの終わりに達すると、それはちょうど去って行き続けることです...それは止めることができないので、Wordはフリーズしてしまい、それからクローズする必要があります。
私の質問:次のコードを編集して、文書の最後に当たると停止することができますか?もしそうなら、どうですか?ありがとう!
Sub RemoveSurplus()
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1
On Error GoTo SubEnd 'remove after debug
Do While Errornumber = 0
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
R1 = Selection
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
R2 = Selection
If (R1 = "-" And R2 = "-") Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdWord, Count:=2, Extend:=wdExtend
Selection.Delete Unit:=wdCharacter, Count:=1
End If
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=False
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "[0-9]@, [0-9]@"
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
N1 = Selection + 1
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
N2 = Selection + 1
Selection.MoveLeft Unit:=wdCharacter, Count:=1
If (N2 = N1 + 1) Then
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
Selection.TypeText Text:="-"
Else: Selection.MoveRight Unit:=wdWord, Count:=1
End If
Loop
SubEnd:
End Sub
は 'Errornumber'は常に0それはどこにも定義されていないと、その値がループで変更されていないので、それはエラーをスローした場合、ループのためのあなたの唯一の出口条件があることになるだろう。コードの残りの部分は、私がテストするときにも動作しないように見えることに注意してください。 – Comintern
別の終了条件を設定するにはどうすればよいですか?私は(〜のような)キャラクターに到達したときにそれを終了しようとしましたが、うまくいきませんでした。 –
今のところ私はF8を使って一度に1ステップずつスクリプトを実行しています。ありがとう。 –