システムwiki

Office:カーソルをブックマークに移動する

PhilipM 受付中 最終更新日:2020-08-19 19:31

これは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)

1 #
DougRob 1

ほとんどの場合、挿入ポイントをブックマークに移動する必要はありません.ブックマークの範囲を使用して、次のようなコードで実行する必要があります.

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 1

Dougへの返信のポイントを明確にするためだけに:VBAでは、Selectionオブジェクトと挿入ポイントは テキストが含まれていないブックマークの場合のように、選択されているものが長さゼロの範囲である場合は、同一です.

Dougが提案したコードActiveDocument.Bookmarks( "Subs_Needed").Range.Selectは、コンパイルエラーなしで完全に機能します.時々、VBAエディターは長い編集セッションの後でひねりを加えて、単語を再起動すると偽物がクリアされます
エラー.