|
> Selection.GoTo What:=wdGoToPage, Which:=wdGoToFirst, Count:=1
無限ループしている直接の原因はこれでしょう。
これはカーソルを1ページ目へ移動する記述ですので、ループ処理の中でこれを使えば、いつも1ページ目しか処理されず、ループも終わらなくなりますね。
あと、その部分を削ったとしても今のままでは各ページの1行目だけに文字が挿入され、2行目以降が処理されなくなるように思えます。
文字を挿入する部分は、以下のように考えてみてください。
それぞれの処理の記述の仕方がわからなければ、再質問してください。
Do
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveEndWhile Cset:=myExcludes, Count:=wdBackward
'ループの中でmyText1とmyText2の内容を変更できるように工夫が必要
With Selection
.InsertBefore myText1
.InsertAfter myText2
End With
'もし10行目まで処理を終えていればループを抜ける
If (10行目まで終わっている)
(ループを抜ける)
'まだ10行目になってなければカーソルを次の行に移動する
Else
(カーソルを次の行に移動)
End If
Loop
ちなみに、
> Dim doc As Word.Document
> Set doc = Application.ActiveDocument
> Dim myDoc As Document
> Dim myRange As Range
> Set myDoc = ActiveDocument
> With Selection
> Set myRange = myDoc.Range(.End - Len(myText2), .End)
> End With
> Set myRange = Nothing
> Set myDoc = Nothing
これらは完全に不要な記述ですね。実質的に何も処理していないので。
複数の処理について参考サイトからコピーしてきたのだと思われますが、あなたがやろうとしていることには必要ありませんよ。
> myExcludes
一見すると、変数の定義がされていないようです。
バグの元になるので、
Dim last_page As Long
などと並べて
Dim myExcludes As String
と記述しておいた方がいいですよ。
> Const myText1 As String = "<item id=""" '前の文字列"
> Const myText2 As String = """>" '後の文字列
間違いではないのですが、普通、変数や定数の宣言はコードの最初にしてしまいます。
Dim last_page As Long
などと並べて記述しておいた方がいいですよ。
> myExcludes = Chr(9) & Chr(10) & Chr(11) & Chr(12) & Chr(13)
ループ処理の中に記述すると、何度も同じ処理をすることになるので(今回の場合大した問題ではないですが)、ループに入る前に記述しましょう。
|
|