VBAでアクセスフォームのテキストを、ワードのブックマークで指定した範囲に上書きさせています。走らせると、ワード文書の先頭行の最初のブックマークにテキスト情報を上書きしてフォントの設定等を行った後、再度範囲を指定してブックマークを再設定させるところで再設定できず、オブジェクトが見つからないことによるエラーを起こしてしまいます。
コードの抜粋は以下のとおりです。
Dim oAppDoc As Object 'Word を操作するオブジェクト変数
Dim Anken As String '案件マーク格納
Dim AnkenColor As Long '案件マークの色番号格納
Dim BMAnken As Word.Range '案件マークのブックマーク
'ワードファイルの書式の修正
'案件の記号を表示する場合に赤文字にする
Anken = Forms![フォーム名]![案件記号]
AnkenColor = IIf(Hiduke >= Int(Now()),wdColorRed, wdColorWhite)
'日付が現在日時より大ならフォントを赤に指定、そうでなければ白(見えなく)にする
Set BMAnken = oAppDoc.ActiveDocument.Bookmarks("案件マーク").Range
With BookMark1
.TEXT = Anken
.Select
.Font.Color = AnkenColor
End With
'案件のブックマークの再設定
oAppDoc.ActiveDocument.Bookmarks.Add "案件マーク", Selection.Range ←ここでエラー処理に飛んでる
'他のブックマークの処理(上記と同様な操作の繰り返し)
ワード文書を確認すると、「案件マーク」のブックマーク範囲は色が変更されますが、ブックマークは再設定されてないためありません。
たまに問題なく動くときもあります!?
また、このプログラム箇所をコメント行にして再度走らせると、次の処理の所も同様の処理をしていますが問題なく処理できます。
どのような理由でこうなってしまうのでしょうか。また、この現象を回避する対処法はあるのでしょうか。
No.1ベストアンサー
- 回答日時:
1) Withステートメントで指定しているオブジェクト名が違う
2) フォントの色に相当するプロパティ名が違う
が疑われます。
Wordの世界だけで動作を確認するため、Word97にて以下のコードを実行したところ、期待されている(と思われる)動作をしていますので。
Sub BMTest()
Const Anken As String = "新しい案件名" 'テスト用仮設定
Const AnkenColor As Long = 6 'テスト用仮設定
Set BMAnken = ActiveDocument.Bookmarks("案件マーク").Range
With BMAnken 'BookMark1 => BMAnken
.Text = Anken '.Selectの行削除
.Font.ColorIndex = AnkenColor 'Color => ColorIndex
End With
'案件のブックマークの再設定
ActiveDocument.Bookmarks.Add "案件マーク", BMAnken 'Selection.Range => BMAnken
End Sub
掲載された部分以外で、元の「案件マーク」と異なる位置に、BookMark1に相当するブックマークを指定しており、旧位置の「案件マーク」は破棄してよい。
および、
Word98以降で、Colorでフォントの色のプロパティにアクセスできるよう変更されている。
のであったらすみません。
この回答への補足
質問でOSとAccess,WordのVer.を紹介するのを失念しておりました。大変失礼しました。
OS:win2k
Access:Word:2002です。
よって、御想定下さいました「フォントの色に相当するプロパティ名」については問題ないかと考えております。
いろいろと想定して下さいまして、誠に感謝します。
ご丁寧なご回答、誠にありがとうございます。
ご教示いただいた内容を参考に、以下のように改めたところ、進むようになりました。
ワードファイルの書式の修正
'案件の記号を表示する場合に赤文字にする
Anken = Forms![フォーム名]![案件記号]
AnkenColor = IIf(Hiduke >= Int(Now()),wdColorRed, wdColorWhite)
'日付が現在日時より大ならフォントを赤に指定、そうでなければ白(見えなく)にする
Set BMAnken = oAppDoc.ActiveDocument.Bookmarks("AnkenMark").Range '"案件マーク"→"AnkenMark"
With BMAnken'BookMark1→BookMark1は書き間違いで、直しました。
.TEXT = Anken
.Select
.Font.Color = AnkenColor
End With
'案件のブックマークの再設定
oAppDoc.ActiveDocument.Bookmarks.Add "AnkenMark", BMAnken 'Selection.Range→BMAnkenに直しました。
'他のブックマークの処理(上記と同様な操作の繰り返し)
.Selectの行削除をおこなったら、範囲選択されず、次の処理で文字の位置をずらす処理がうまく進まなくなってしまったので、再度.Selectを入れました。
また、ブックマーク名を半角文字に直した所、すんなり行くようになりました。
繰り返して確かめたところ、問題はありませんでした。
うまく動くようになり、大変うれしく思っております。ご教示下さり、誠にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) vbaで条件付き書式を設定したときの適用範囲について 1 2023/07/17 23:14
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ウーバー やってたらパッケージ...
-
「案件」という言葉の使い方
-
派遣の顔合わせ後、結果の先送...
-
管理
-
かなりセンシティブな内容です ...
-
JAVA、PHPの案件に入るにはどう...
-
派遣で初回契約を更新せずにA社...
-
不採用が続いています
-
職場見学調整中に断られる×3
-
案件自体キャンセルのはずが、...
-
派遣会社に登録後、「案件がな...
-
派遣社員さん、派遣会社にお勤...
-
派遣登録会面接で喧嘩をしまし...
-
派遣会社の経理のスキルチェッ...
-
別の派遣に登録するか待つか。
-
メイツ中国の登録
-
EXCEL リンク先のファイルを移...
-
リクルートスタッフィング、仕...
-
40代でリクルートスタッフィン...
-
自社内での競合?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ウーバー やってたらパッケージ...
-
派遣の顔合わせ後、結果の先送...
-
職場見学調整中に断られる×3
-
かなりセンシティブな内容です ...
-
同じ派遣会社の別の案件にエン...
-
不採用が続いています
-
管理
-
物件、案件の使い分けは
-
「案件」という言葉の使い方
-
40代でリクルートスタッフィン...
-
EXCEL リンク先のファイルを移...
-
JAVA、PHPの案件に入るにはどう...
-
派遣登録会面接で喧嘩をしまし...
-
リクルートスタッフィング、仕...
-
派遣で初回契約を更新せずにA社...
-
派遣会社に登録後、「案件がな...
-
別の派遣に登録するか待つか。
-
派遣の社内選考 案件紹介して...
-
派遣会社の経理のスキルチェッ...
-
派遣社員さん、派遣会社にお勤...
おすすめ情報