WordのVBAを使用してブックマークを変数で登録しようとした際に、コンパイルエラーが発生することがあります。このエラーは「ブックマークの名に誤りがある」と表示されることが多いです。この記事では、このエラーの原因とその解決方法について詳しく解説します。
1. コンパイルエラーの原因
質問者のコードでは、以下のような部分が問題となっています。
Dim Fnum As String
Dim targetRange As Word.Range
Fnum = ActiveDocument.Range(Start:=Scurnum, End:=Ecurnum)
Set targetRange = ActiveDocument.Range(Start:=Scurnum, End:=Ecurnum)
ActiveDocument.Bookmarks.Add Name:=Fnum, Range:=targetRange
このコードでは、「Fnum」という変数に範囲を代入し、それをブックマークの名前として使用しようとしています。しかし、Fnumに範囲を代入していることが問題です。ブックマーク名は文字列でなければならないため、範囲オブジェクトを文字列として扱おうとするとエラーが発生します。
2. 解決方法:文字列に変換する
ブックマーク名には、範囲そのものではなく、その範囲を示す文字列を代入する必要があります。以下のように、範囲の開始位置と終了位置を文字列として扱うように修正しましょう。
Dim Fnum As String
Dim targetRange As Word.Range
Fnum = "Bookmark_" & CStr(Scurnum) & "_to_" & CStr(Ecurnum)
Set targetRange = ActiveDocument.Range(Start:=Scurnum, End:=Ecurnum)
ActiveDocument.Bookmarks.Add Name:=Fnum, Range:=targetRange
ここでは、ScurnumとEcurnumを文字列に変換し、それを組み合わせてブックマーク名を生成しています。これにより、ブックマーク名として適切な文字列を渡すことができます。
3. 追加の注意点
以下の点に注意することで、さらに安定したコードを書くことができます。
- 範囲の正確な指定: 範囲オブジェクトを設定する際は、正しい開始位置と終了位置を指定することが重要です。
- エラーハンドリングの追加: 万が一、指定した範囲が無効だった場合に備えて、エラーハンドリングを追加することをおすすめします。
- 変数の適切な宣言: 変数の型を正確に宣言することが、エラーを防ぐために重要です。
4. まとめ
VBAでブックマークを変数で登録する際には、変数に範囲オブジェクトを代入するのではなく、その範囲を文字列として扱う必要があります。これにより、コンパイルエラーを回避し、正しくブックマークを作成することができます。また、エラーハンドリングや範囲の正確な指定を心掛けることで、さらに安定したコードを作成できます。


コメント