アプリ版:「スタンプのみでお礼する」機能のリリースについて

 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 ←ここでエラー処理に飛んでる
'他のブックマークの処理(上記と同様な操作の繰り返し)

 ワード文書を確認すると、「案件マーク」のブックマーク範囲は色が変更されますが、ブックマークは再設定されてないためありません。
 たまに問題なく動くときもあります!?
 また、このプログラム箇所をコメント行にして再度走らせると、次の処理の所も同様の処理をしていますが問題なく処理できます。
 どのような理由でこうなってしまうのでしょうか。また、この現象を回避する対処法はあるのでしょうか。

A 回答 (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です。

 よって、御想定下さいました「フォントの色に相当するプロパティ名」については問題ないかと考えております。
 いろいろと想定して下さいまして、誠に感謝します。

補足日時:2004/11/29 18:21
    • good
    • 0
この回答へのお礼

 ご丁寧なご回答、誠にありがとうございます。
 ご教示いただいた内容を参考に、以下のように改めたところ、進むようになりました。

ワードファイルの書式の修正
'案件の記号を表示する場合に赤文字にする
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を入れました。

 また、ブックマーク名を半角文字に直した所、すんなり行くようになりました。

 繰り返して確かめたところ、問題はありませんでした。

 うまく動くようになり、大変うれしく思っております。ご教示下さり、誠にありがとうございました。

お礼日時:2004/11/29 18:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!