VBAでアクセスのデータをワードのブックマークに転写する方法とエラーの対処法

このQ&Aのポイント
  • VBAを使用してアクセスフォームのテキストをワードのブックマークに転写する方法について説明します。
  • しかし、再設定時にオブジェクトが見つからないエラーが発生することがあります。
  • このエラーを回避するためには、ブックマークの再設定方法を見直す必要があります。
回答を見る
  • ベストアンサー

VBAでアクセスのデータをワードのブックマークに転写したところ

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Raistlin
  • ベストアンサー率63% (65/102)
回答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でフォントの色のプロパティにアクセスできるよう変更されている。 のであったらすみません。

zinchan
質問者

お礼

 ご丁寧なご回答、誠にありがとうございます。  ご教示いただいた内容を参考に、以下のように改めたところ、進むようになりました。 ワードファイルの書式の修正 '案件の記号を表示する場合に赤文字にする 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を入れました。  また、ブックマーク名を半角文字に直した所、すんなり行くようになりました。  繰り返して確かめたところ、問題はありませんでした。  うまく動くようになり、大変うれしく思っております。ご教示下さり、誠にありがとうございました。

zinchan
質問者

補足

質問でOSとAccess,WordのVer.を紹介するのを失念しておりました。大変失礼しました。  OS:win2k  Access:Word:2002です。  よって、御想定下さいました「フォントの色に相当するプロパティ名」については問題ないかと考えております。  いろいろと想定して下さいまして、誠に感謝します。

関連するQ&A

  • ワード VBA

    ワードのマクロについて教えてください。 以下のようなマクロをボタンに登録しています。 Sub Macro10() Dim myReg As Object Dim st As String Dim match As Variant Set myReg = CreateObject("VBScript.Regexp") myReg.Pattern = "\x0d\x0d(|$)" myReg.Global = True st = ActiveDocument.Range.Text ActiveDocument.Range(1, 1).Select For Each match In myReg.Execute(st) With Selection .Find.Text = match.Value .Find.Replacement.Text = vbCr .Find.Execute , , , , , , , , , , wdReplaceAll End With Next st = ActiveDocument.Range.Text If myReg.Test(st) Then _ ActiveDocument.Range.Text = myReg.Replace(st, "") Set myReg = Nothing End Sub ここで教えていただきたいのは,上記のマクロを実行するためにボタンを押した際,実行前にカーソルが置かれていたのと同一の場所に実行後のカーソルを戻す方法です。(ちなにみ上記のマクロを実行する際にカーソルが置かれているのは,空白行ではない行の先頭です。※処理とは関係ないかもしれませんが,念のために。) そのような処理を行うには,上記のマクロにどのような記述を追加すればよいのでしょうか。 どなたかご教示いただければと思います。 どうぞよろしくお願いいたします。

  • WORD VBAでハイパーリンクの文字列色変更

    最初の質問 VBAの初心者です。教えてください。 色々なWEBサイトより情報を集めてWORD文書を作成しています。フォント名、サイズ、色がバラバラで、それを統一するVBAは以下のように出来たのですが、ハイパーリンクされている文字の色も黒になっています。ハイパーリンクされている文字色だけは本来の青色で表示したいのですが、どのようにしたらいいのか分かりません。よろしくお願いします。 (WORD2007 Windows7) 早速keithinさんより以下のご回答をいただきました。新しいWORDファイルで例題(30行ぐらい)を作り実行したところ、希望通りの結果でした。 その後ハイパーリンクの全てが表の中にある本ファイルで実行したところ、ハイパーリンクスタイルを再設定する途中で止まってしまい(12-13は設定されている)、”指定されたプロパティはこのオブジェクトではサポートされません”として h.Range.Style = wdStyleHyperlink がハイライトされてしまいます。 どのような問題が考えられるのでしょうか? 問題解決したと云いながら申し訳ありません。 サポートよろしくお願いします。 Sub macro1()  Dim h As Hyperlink ’全文のフォントを設定する  With ActiveDocument.Range(0, ActiveDocument.Range.End).Font   .Name = "MS Pゴシック"   .Size = 10.5   .Bold = False   .Color = wdColorBlack  End With ’ハイパーリンクスタイルを再設定する  For Each h In ActiveDocument.Hyperlinks   h.Range.Style = wdStyleHyperlink  Next End Sub

  • AccessデータのWORDブックマークへの差込

    Access 2010のデータ(資本金)をWORD2010のブックマーク(Money)に差し込むマクロを作成し、うまく稼動しました。 その箇所は次のとおり記述しています .Item("Money").Range.Text = Me!Form![資本金].Value アクセスの書式では、テーブル・クエリー・フォームともカンマ形式で表示の設定をしているのですが、差し込んだWORDでは、カンマ書式で表示されません カンマ形式で表示させるために、WORD側でなんらか手を加えたほうがいいのか、ACESS側で手を加えたほうがいいのか教えていただけますでしょうか?

  • ワードのVBAで

    お世話になります。X = ActiveDocument.Tables(1).Cell(1, 2) のコードでワードの表から値を取得するとテキストの最後に改行マーク「・」が付いてきます。テキストだけ取得する方法をお教えください。 宜しくお願い致します。

  • WORD2007 VBA

    オープンしているWORDファイルで使用されているフォント名とサイズを全て一覧表示するVBAを希望しています。 次のような表示が欲しいのですが、よろしくお願いします。 MSP ゴシック 10 MSP ゴシック 12 Arial 14 Times New Roman 10 ---------------------------- この質問に対してn-jun さんより以下のご回答を頂きました。サンプルを作りテストしたところWOOD2007で希望通りの結果が得られましたのでベストアンサーとさせてもらいました。 しかし、その後大きなWORDファイルに適用したところ、結果が表示されません。 エラーがでれば問題解決につながるのでしょうが、何らエラーメッセージが出ません。 ご指導いただければありがたいです。 -------------------------------- Word2002で検証しました。。。 Sub try() Dim myDic As Object Dim v, vv Dim i As Integer Set myDic = CreateObject("Scripting.Dictionary") i = 0 ReDim vv(i) For Each v In ActiveDocument.Range.Characters If Len(v) > 0 Then If Not myDic.Exists(v.Font.Name & " " & v.Font.Size) Then myDic(v.Font.Name & " " & v.Font.Size) = "" vv(i) = v.Font.Name & " " & v.Font.Size i = i + 1: ReDim Preserve vv(i) End If End If Next MsgBox Join(vv, vbCrLf) Set myDic = Nothing End Sub

  • Word VBA テキストボックスのフォントサイズ

    Wordでマクロを組んでいます。 文書内から取得した値を変数へ格納し、複数の変数をつないでテキストボックスに入れ、文書へ追加しています。 このテキストボックスの文字のフォントサイズを前と後ろで変えたいのですが、色々試していますがうまくいきません。 お分かりになる方がいらっしゃいましたら教えてください! 以下コードです。 下記の「EIJI」のみフォントサイズを20ptにしたいのです。 変数に格納する文字列は都度変化し、文字数も変わります。 よろしくお願いします! Sub try() Dim KANA As String, KATAKANA As String, EIJI As String KANA = "あああ" KATAKANA = "アアア" EIJI = "AAA" Dim myTxt As String myTxt = KANA & "/" & KATAKANA & "/" & EIJI Dim objTextBox As Object Set objTextBox = ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, 25, 20, 530, 25) objTextBox.Select With Selection .Font.Size = 16 .TypeText Text:=myTxt End With End Sub

  • excel VBAを利用し、テンプレートとなるワードファイルの一部分を

    excel VBAを利用し、テンプレートとなるワードファイルの一部分をエクセルデータで 置換を行い、新しいワードファイルとして保存するという処理を作成しています。 [環境] Windows Vista Office 2007 差し込み文書ではなく個別にファイルを作りたいという条件があります。 処理としては、 テンプレートを開く→置換を実施→別名で保存→テンプレートを変更せず閉じる を繰り返し実施しています。 ただ、このやり方ですと最後の閉じる処理を行った際に、 「wordは、動作を停止しました」というエラーメッセージが頻繁に出てしまいます。 出来上がったファイル自体は問題なく読めているんですが。 処理自体に問題があるんでしょうか? VBA自体初心者であり、他に良い方法などありましたらご教示いただけたら助かります。 #処理内容はだいぶ簡略化しています。 Public Function output_word2()   Dim word        As New word.Application   Dim document      As word.document   Dim file_name      As String   Dim output       As String   Dim path        As String   Dim row        As Integer      Sheets(CALC_SHEET).Select 'データ取得用シート   path = Application.ActiveWorkbook.path   file_name = path & "\xxxxxx.doc"          '元の文書   row = 3   Do     If Range("B" & row).Value = "" Then       Exit Do     End If          With word       .Documents.Open Filename:=file_name       Set document = .ActiveDocument     End With          word.Selection.Find.Text = "{置換対象文字}"     word.Selection.Find.Forward = True     word.Selection.Find.Replacement.Text = Range("C" & row).Value     word.Selection.Find.Execute , , , , , , , , , , wdReplaceAll          output = path & "\output\" & Range("C" & row).Value  & ".doc"          document.SaveAs Filename:=output   '置換後のword文書を別名で保存     document.Close SaveChanges:=False     word.Quit     row = row + 1     Set word = Nothing     Set document = Nothing   Loop End Function

  • EXCELからWORDの文章を取得

    set WD=GetObject(,"Word.Appllication") para1=Wd.activedocument.Paragraphs(1).Range.Sentences(1).text で、無事、activeなWordの文章は取れるのですが、 実際にあり、開いているWord文章(D:\aabbcc.docx)を処理しようと set WD=GetObject("D:\aabbcc.docx") para1=Wd.activedocument.Paragraphs(1).Range.Sentences(1).text とするとエラーになります。 どうやったら、取得できるでしょうか?

  • VBAで、エクセルからワードへの変換について

    VBAは、全くの初心者で、テキスト等のサンプルコードを参照して書いているのですが 期待通りの動きをしないので、教えてください。 やりたい事は、Excelファイル(A-Fカラム、400行程度)を 1行ページのワードに変換し、400枚のワードファイルを作成します。 その際に、添付画面のように、各カラムを、タイトル、連番、内容などと区分けをして フォントも変えたいです。 下のコードでは、転送は、出来るのですが、1行1ページにならず、また、 エクセルの枠も転送されてしまいます。 ワードVBAも試したのですが、特定文字での検索が難しく、各ページでの 改行位置が異なるため、自分の理解では出来ませんでした。 ワードでテンプレートを作って、Excel VBAから差込になるのでしょうか? よろしくお願い致します。 Sub CopyExcelDataToWord() Dim wsSource As Excel.Worksheet Dim cell As Excel.Range Dim collUniqueHeadings As Collection Dim lngLastRow As Long Dim i As Long Dim appWord As Word.Application Dim docWordTarget As Word.Document Set wsSource = ThisWorkbook.Worksheets(1) With wsSource lngLastRow = .Range("A" & Rows.Count).End(xlUp).Row Set collUniqueHeadings = New Collection For Each cell In .Range("A2:A" & lngLastRow) On Error Resume Next collUniqueHeadings.Add Item:=cell.Value, Key:=cell.Value On Error GoTo 0 Next cell End With Set appWord = CreateObject("Word.Application") With appWord .Visible = True Set docWordTarget = .Documents.Add .ActiveDocument.Select End With For i = 1 To collUniqueHeadings.Count With wsSource .Range("A1").AutoFilter Field:=1, Criteria1:=collUniqueHeadings(i) .Range("A1:D" & lngLastRow).Copy End With With appWord.Selection .PasteExcelTable linkedtoexcel:=False, wordformatting:=True, RTF:=False .TypeParagraph End With Next i For i = 1 To collUniqueHeadings.Count collUniqueHeadings.Remove 1 Next i Set docWordTarget = Nothing Set appWord = Nothing End Sub

  • ワードVBAで、段落のタブの数を数えたい。

    ワード2002使用です。 2段落目に複数のタブが入力されています。 ワードVBAで、選択した段落のタブの個数を数えたい。 sub タブ() Dim tab数 As Integer ActiveDocument.Paragraphs(2).Range.Select tab数 = Selection.Paragraphs.tabs.Count←ここがよくわかりません msgbox tab数 end sub よろしくお願いします。

専門家に質問してみよう