Office:カーソルをブックマークに移動する
これはVBAの単語への最初の重要なステップであり、ルーチンを段階的に構築しようとしています.つまり、正しくコーディングしていることを確認するためです.
最初にしたいことは、挿入ポイントを設定することです.ドキュメントの特定のブックマークされたポイントで、そこから他の作業を行います(他の作業はまだコーディングされていませんが、最初にGoToを修正したいだけです).
私のドキュメントで1ダースのブックマークと1つのブックマークを宣言しましたそれらのうちの1つはSubs_Neededと呼ばれます.これは、挿入ポイントを移動したいブックマークです.
これを行うために記述したコードは、
Sub Go_To_Subs_Needed()
Set R1=ActiveDocument.GoTo(What := wdGoToBookmark、Which:= "Subs_Needed")
End Sub
そのコードを実行すると、エラー「Bad parameter」が返されます.同じコードを実行すると、Subs_Neededを囲む引用符がないと、エラー「このブックマークはコードを実行すると、カーソルがドキュメントの先頭に置かれます.
次に、Immediaを使用して診断を行うことにしました.次のようにwindows を表示します.
MsgBox ActiveDocument.Bookmarks( "Subs_Needed").Range.BookmarkID
メッセージに数値6(=ドキュメントにあるブックマークの総数)
MsgBox ActiveDocumentが表示されます.Bookmarks(Subs_Needed).Range.BookmarkID
表示されるエラー「コレクションの要求されたメンバーは存在しません」
MsgBox ActiveDocument.Bookmarks(2).Name
表示されるメッセージSubs_Needed
(実際に1で、Subs_Neededが見つかるまで1つずつ移動するつもりでしたが、幸いにも(2)で表示されました.
そのため、Subs_Neededブックマークが存在することが「証明された」ようです.
結論上記のように、サブルーチンのアクティブな1行でエラーが発生していますか?
予想に感謝して
フィリップ
ベンディゴ、ビクトリア
返信リスト(回答:5)
ほとんどの場合、挿入ポイントをブックマークに移動する必要はありません.ブックマークの範囲を使用して、次のようなコードで実行する必要があります.
ActiveDocument.Bookmarks( "Subs_Needed").Range.InsertBefore "Some Text"
ただし、ブックマークを選択する必要がある場合は、次のようにします:
ActiveDocument.Bookmarks( "Subs_Needed").Range.Select
次のURLにある「VBAでブックマークを操作する」の記事を参照してください.
https://wordmvp.com/FAQs/MacrosVBA/WorkWithBookmarks.htm
応答1# ->にスキップ2 #PhilipM 1提案ありがとうございます.上記のコードを実行しましたが、エラーコンパイルエラーが発生しました:関数または変数が予期されています.
私がやりたいことは、ブックマークを選択するのではなく、ブックマークに移動して、システムに長い置換シーケンスを実行させることです.各置換の「ターゲット」ポイントは、このドキュメントには160個あり、次のドキュメントには200個近くあります.
文書内で、ブックマークSubs_Neededの後に発生する一連のページ.ちょっと脇に置いておくと、ブックマーク名を二重引用符で囲む必要がある場合、およびブックマーク名を付けずに残す必要がある場合について、この時点では韻も理由もないようで本当に混乱しています.
私はもう少しグーグルし、次のコードが機能しました.
Selection.GoTo What:= wdGoToBookmark、Name:= "Subs_Needed"
ブックマークには実際には文字が含まれていないため、何も選択されていませんが、挿入ポイントは移動しています.
応答2# ->にスキップ3 #GrahamMブックマークに書き込みたい場合は、必要に応じてコードから次の機能を呼び出します.ブックマークに別の値を書き込むことで値を変更できます.ブックマークが存在しない場合、マクロは何もしません.e.g.:
sub macro1()
fillbm "subs_needed"、 "easy text"
end subパブリックサブフィラー(strbmnameとしてのstrbmname、文字列としてstrvalue)
'' 'グラハム市長- リンク:M.
range as range as all
LBL_EXIT
orng=.books(strbmname).range
orng.text= strvalue
orng.bookmarks.add strbmname
lbl_exit:
set orng= nothing
ja sub
end sub
応答3# ->にスキップ4 #PhilipMご協力ありがとうございます.
次のコードは私が望んだことを実行しました:-
Sub Find_And_Replace_Family_Names()
Dim I、J As Long
Dim Family_Names(45)As String
Dim strFindText As String
Dim strReplaceText As String
Family_Names(1)= "Keynes "
Family_Names(2)=" Hughes "
Family_Names(3)=" Donnell(y) "
Family_Names(4)=" Barrett "
Family_Names(5)=" Rice "
Family_Names(6)= "Flynn"
Family_Names(7)= "Brodie"
Family_Names(8)= "Woods"
Family_Names(9)= "Partridge"
Family_Names(10)= "Boake"
Family_Names(11)= "Hills"
Family_Names(12)= "Dudgeon"
Family_Names(13)= "Lennon"
Family_Names(14)= "Power"
Family_Names(15)= "MacNaught"
Family_Names(16)= "Lloyd"
Family_Names(17)= "Martin of Dublin"
Family_Names(18)= "Kingsford"
Family_Names(19)="ニューヨークのロバーツ"
Family_Names(20)= "Cox"
Family_Names(21)= "Audsley"
Family_Names(22)= "Grube"
Family_Names(23)= "South"
Family_Names(24)= "Roatta"
Family_Names(25)= "Ramsay"
Family_Names(26)= "Marti n of the Iroquois "
Family_Names(27)=" Hunt of Ontario "
Family_Names(28)=" Smith of Victoria "
Family_Names(29)=" Roberts of Victoria "
Family_Names(30 )= "ベイトマン"
Family_Names(31)= "ハントオブウィルトシャー"
Family_Names(32)= "ルイス"
Family_Names(33)= "ヤングジェイボークと結婚した"
Family_Names(34 )= "Dibblee"
Family_Names(35)= "Schneeberg"
Family_Names(36)= "Contesse"
Family_Names(37)= "Redhouse"
Family_Names(38)= "Archer"
Family_Names(39)= "ブラウン"
Family_Names(40)= "Pumphrey"
Family_Names(41)= "Bromhead"
Family_Names(42)= "Dahlsen"
Family_Names(43)="Shanahan"
Family_Names(44)= "Mitchell"
Family_Names(45)= "Wilson of Antrim"
strFindText="Armagh"
Set rngStart=ActiveDocument.Bookmarks( "Subs_Needed").Range
Set rngEnd=ActiveDocument.Bookmarks( "Part_B_V1_Bottom").Range
ActiveDocument.Range(rngStart.Start、rngEnd.End).Select
For I=1 To 45
strReplaceText=Family_Names (私)
For J=1 to 4
With Selection.Find
.Text=strFindText
.Replacement.Text=strReplaceText
.Forward=True
.Wrap=wdFindStop
.Format=False
.MatchCase=False
.MatchWholeword=False
.MatchWildcards=False
.MatchSoundsLike=False
.MatchAllwordForms=False
End with
Selection.Find.Execute Replace := wdReplaceOne
'ドキュメントのすべての部分を再選択します.Replaceコマンドは、選択された領域をその単語だけに変更するためです
ActiveDocument.Range(rngStart.Start、rngEnd.End).Select
次へJ
次へ
End Sub誰かが同様のことをしたい場合に備えて、これが役に立てば幸いです.
最高
フィリップ
ビクトリア州ベンディゴ
応答2# ->にスキップ5 #JayFree 1Dougへの返信のポイントを明確にするためだけに:VBAでは、Selectionオブジェクトと挿入ポイントは テキストが含まれていないブックマークの場合のように、選択されているものが長さゼロの範囲である場合は、同一です.
Dougが提案したコードActiveDocument.Bookmarks( "Subs_Needed").Range.Selectは、コンパイルエラーなしで完全に機能します.時々、VBAエディターは長い編集セッションの後でひねりを加えて、単語を再起動すると偽物がクリアされます
エラー.