• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Word2007 文字変換マクロについて)

Word2007 文字変換マクロのエラーを解消する方法

Wendy02の回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 細かい間違いがあっても、エラーが出ますし、VBScriptは、どこに間違いがあるか、すぐに分からない部分があります。どんなエラーかという内容などいりません。最初から最後まで、エラーなく通ればそれで良いとは思います。ただ、以下のコードは、エラー解除が完全に行われているとは限りません。チェック用と書いてあるのは、ローカルウィンドウなどありませんので、要所で、ストップを入れています。 出来れば、WordのVBAのアドイン化したほうが楽かもしれません。なお、最後に、エラーは返すようにしました。 それと、2.csv ファイルは、どちらかというと、ini ファイルなど、別の名称のほうが良いかもしれません。ただ、手元に参考テキストもないので、2.csvに、2行以上あるなどの問題に対するチェックされていません。 一応、以下は、オートメーション・オブジェクトを残っていないようですが、一度は、必ず、タスクマネージャで、WINWORD.EXE が残っていないか調べてみてください。 '------------------------------------------- '注意:全角空白は、絶対に入れないでください。 '================ ''WordReplace.vbs '================= Const wdReplaceAll = 2 Const mFOlDER = "D:\test" Const csvFILE = "2.csv" Const sEXT = ".docx" Dim tx1, tx2 Dim objWord Dim fName Dim objFolder Dim cnt cnt = 0 Set objWord = CreateObject("Word.Application") Set fs = CreateObject("Scripting.FileSystemObject") Set objFolder = fs.GetFolder(mFOlDER) Call PickUpWord If tx1 <> "" Then On Error Resume Next For Each objFile in objFolder.Files If Right(LCase(objFile.Name), len(sEXT)) = sEXT Then 'チェック用 'MsgBox objFile.name Call WordExe (tx1, tx2, objFolder.Path & "\" & objFile.Name) End If Next End If objWord.Quit Set fs = Nothing Set objWord = Nothing If Err.Number >0 Then MsgBox Err.Description,48,"Error!" Else MsgBox cnt & " 個処理済み。正常終了しました。",64,"終了メッセージ" End If On Error Goto 0 '!!Here is the End of Program. '------------------------------------------- Sub PickUpWord() Const ForReading = 1 Dim f Dim sLine Set f = fs.OpenTextFile(mFOLDER & "\" & csvFILE, ForReading, True) sLine = f.ReadLine() s = Split(sLine, ",") 'MsgBox s(0) & " " & s(1) tx1 = s(0) tx2 = s(1) End Sub Sub WordExe(tx1, tx2, fName) cnt = cnt + 1 Const wdFindContinue =1 objWord.Visible = False Set objDoc = objWord.Documents.Open(fName) Set objSelection = objDoc.Application.Selection 'チェック用 'Msgbox fName & " :" & cnt With objSelection.Find .ClearFormatting .Replacement.ClearFormatting .Text = tx1 .Forward = True .MatchWholeWord = True .Replacement.Text = tx2 .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With ret =objSelection.Find.Execute(, , , , , , , , , , wdReplaceAll) If ret Then objDoc.Save End If objDoc.Close End Sub

narin_san
質問者

お礼

Wendy02さん、貴重な回答ありがとうございます。道が開けました。 内容を見て問題なく動くと思って、VBSファイルに貼り付けて実行してみましたところ、自動的にWordファイルが開いて処理され正常に終了しました。 Wordファイルを開いて確認してみましたところ、2.csvファイルの一番目の行(A,B)しか処理されていません。二番目の行以降(C,D)も処理するにはどこをどのように直したらよいでしょうか。宜しくお願いいたします。 2.csvの内容 A,B C,D E,F 2.csvのcsvは、txtでいいと思っています。アドバイスありがとうございました。

関連するQ&A

  • フォルダ内の複数のファイルで置換したい

    お世話になります。 現在、フォルダ内にWord及びExcelファイルがたくさんありまして、 その中の”2009-11-30”という語を”2009-12-22”に 一括で置換したいと思っています。 置換したい語は、Wordではヘッダに、Excelではフッタにあります。 ネットで検索したらスクリプトという物があることを知り、また、 以下のようなword用のスクリプトを見つけたので、 置換する用語の部分だけ変更したのですが、 ヘッダに書いてある文字は置換してくれませんでした。 (ヘッダ以外の文字で試したらOKでした) これは、アイコンをダブルクリックして 対象のファイルが入っているフォルダを指定するものらしいです。 ------------------------------- '#1 フォルダ全部のファイルでやる場合 '#2 指定したファイルだけやる場合 Const wdReplaceAll = 2 strDir = InputBox("ディレクトリ名を入力してください。") '#1 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") '#1 Set objFolder = objFSO.GetFolder(strDir) '#1 Set objWord = CreateObject("Word.Application") objWord.Visible = True For Each objFile In objFolder.Files '#1 If Lcase(Right(objFile.Name, 4)) = ".doc" Then '#1 strArg = objFile.Path '#1 '#2 For Each strArg In WScript.Arguments Set objDoc = objWord.Documents.Open(strArg) Set objSelection = objWord.Selection objSelection.Find.ClearFormatting objSelection.Find.Replacement.ClearFormatting With objSelection.Find .Text = "2009-11-30" .Replacement.Text = "2009-12-22" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With objSelection.Find.Execute ,,,,,,,,,,wdReplaceAll 'Replace:=wdReplaceAll objDoc.Save objWord.Documents.Close Set objDoc = Nothing Set objSelection = Nothing End if '#1 Next objWord.Quit -------------------------------------- これは、内容をどう変えたらヘッダやフッタ部分も 置換してくれるようになりますか? また、Excel用にするには、このスクリプト内の "Word"を"Excel"に変えるだけで良いのでしょうか? 参考までに、OSはXPです。 足りない情報等ございましたらご指摘願います。 どうぞよろしくお願いいたします。

  • word2007 マクロ

    下記マクロは蛍光ペン部分を消して、その文字数分にアンダーラインを引くマクロになります これを改造して、赤文字を消して、その文字数分を空欄にしたいのです。 ですが、wdColorRedの入れ方が分かりません。ご教授お願いします。 Sub Problem() '蛍光ペン部分を消して、アンダーラインを引く Selection.Find.ClearFormatting Selection.Find.Highlight = True Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Highlight = False With Selection.Find.Replacement.Font .Underline = wdUnderlineSingle .StrikeThrough = False .DoubleStrikeThrough = False .Outline = False .Shadow = False .Hidden = False .AllCaps = False .Superscript = False .Subscript = False End With With Selection.Find .Text = "*" .Replacement.Text = " ^z" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • Word2010特定の名前を置き換えるマクロ

    例えば、Wordの文章で「田中」とあるものを「山田」に変えたい場合は、置き換えの機能を使ってマクロの記録ができると思います。 しかし、こうするとテキストボックスやヘッダフッタに記載された文字は変更できないように思います。 どうすれば、これらの文字も含めて置換の対象とすることができるか教えてください。 Sub Macro() Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "山田" .Replacement.Text = "田中" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • Wordマクロ

    Wordでワイルドカードを使った置換マクロを作ったのですが、 「MatchWildcardsとMatchSoundsLike、MatchAllWordForms、MatchFuzzyは、同時にTrueに設定することはできません。」 というエラーが出てしまいます。 MatchSoundsLike、MatchAllWordForms、MatchFuzzyは、 ソースに書いてないしTrueにもしていません。 どこが悪いのでしょうか? 以下がソースファイルです、よろしくお願いいたします。 Sub substitute() ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "[!a-f]{1,}" .Replacement.Text = "@" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • ワードで選択範囲だけの改行を削除するマクロ

    こんにちは いつもお世話になっています ワード2010で、選択範囲だけの部分の改行を削除するマクロを記録マクロで作ったのですが、選択部以外もすべて改行してしまいます。どこがいけないのでしょうか。あるいは、操作の仕方でしょうか。以前は使えていたと思うのですが、仕様が変わったのでしょうか。 任意の範囲を選択しておいて、記録を開始しました。 よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "^p" .Replacement.Text = "" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub ネット上で見つけた以下のマクロでもすべての改行が削除されます。 http://okwave.jp/qa/q960285.html Sub Macro14() Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "^p" .Replacement.Text = " " End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • ワードでマクロがうまくいきません。

    よろしくお願いします。 マクロの知識はほとんどないのですが、 「マクロの記録」の機能を使い、ワードで 「スペースを探し出し、そのスペースにアンダーラインを引く。」 ために、 -------------------- 編集ー置換ー 検索する文字列にスペースをタイプ、 置換後の文字列にスペースをタイプ、 オプションの書式で、フォント、下線、一重下線 すべて置換 -------------------- マクロの記録を選択した後、上のように作業しました。 そしてマクロの記録をとめました。 マクロの記録中の操作では、思い通りに置換されるのですが、 次にそのマクロを作動させると、なにもおこりません。 なにか変な操作をしたのか、と五度くらい試したのですが、 やはり動きません。 中身は、↓のようでした。 -------------------- Sub Macro2() ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = " " .Replacement.Text = " " .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub -------------------- どうしてうまく動かないのでしょうか。 教えていただけるとありがたいです。よろしくお願いします。

  • VBSでWordの文字色変え

    VBSなのですが Wordファイルをドラッグしたら <と>で囲まれた文字の色を変更して保存する というものを考えております が <============= 部分でコンパイルエラー(ステーメントがありません) が発生します 初心者でさっぱりわからないのですが どなたかお助けを! よろしくお願いいたします 以下ソース Dim objWord Dim f Dim m If WScript.Arguments.Count<1 Then m="Hello!" MsgBox m WScript.Quit End If Set objWord=CreateObject("Word.Application") objWord.Visible=True For Each f In WScript.Arguments objWord.Documents.Open f objWord.Selection.Find.ClearFormatting objWord.Selection.Find.Replacement.ClearFormatting objWord.Selection.Find.Replacement.Font.Color = wdColorRed With objWord.Selection.Find .Text = "\<[!\>]@\>" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With objWord.Selection.Find.Execute Replace:=wdReplaceAll '<======================= objWord.ActiveDocument.SaveAs f&".doc" objWord.ActiveDocument.Close Next objWord.Quit WScript.Quit

  • WHSでWordのテキストボックス内文字列を置換

    ★環境★ OS:windows2000 WSH:5.6 Word:2000 ★質問★ 下記の関数を使ってWordファイルの文字列置換を自動で行うことができるようになりました。 しかしテキストボックス内の文字列が置換対象になりません。 どのような施しをすればよいのでしょうか。 よろしくお願いします。 set objword=Wscript.CreateObject("word.Application") Const wdReplaceAll=2            ・            ・            ・ sub replacetext(beforeText,afterText) objword.selection.find.text=beforeText objword.selection.find.forward=true objword.selection.find.matchwholeword=true objword.selection.find.replacement.text=afterText objword.selection.find.replacement ,,,,,,,,,,wdReplaceAll end sub

  • macroコードを短縮できるでしょうか。

    下記のコードで、実行できます。大部分はマクロを記憶し、同じ処理を重ねただけのものです。 目的は、ワードで選択した文字列の中から数字を削除します。 ただし、下記のような場合は削除しません。 【請求項1】、項2、ないし3、いずれか1、【0019】、第3の、 この処理を行うために、差別化しました。 まず、数字を赤字で太字にしました。 次に、上記の、削除しては具合が悪い数字については、明朝で標準に戻すようにしてから、赤字で太字の数字を削除しました。 2000文字を超えるので、途中大幅にカットしました。 以下は、コードです。 ~~~~~~~~~~~~~~~~~~~~~~~~ Private Sub 符号削除() Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Range.Find .ClearFormatting .Text = "第1" .Replacement.Text = "" .Replacement.Font.Color = 1 .Replacement.Font.Bold = False .Execute Replace:=wdReplaceAll End With Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Range.Find .ClearFormatting .Text = "第2" .Replacement.Text = "" .Replacement.Font.Color = 1 .Replacement.Font.Bold = False .Execute Replace:=wdReplaceAll End With Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Range.Find .ClearFormatting .Text = "又は2" .Replacement.Text = "" .Replacement.Font.Color = 1 .Replacement.Font.Bold = False .Execute Replace:=wdReplaceAll End With ↓以下、20まで繰り返し Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Range.Find .ClearFormatting .Text = "乃至20" .Replacement.Text = "" .Replacement.Font.Color = 1 .Replacement.Font.Bold = False .Execute Replace:=wdReplaceAll End With Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "1" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll ↓以下、9,0まで繰り返し Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "9" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "0" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub ~~同じ繰返しを短くする部分の正規表現の使い方やloopを指南していただけたら幸甚です。

  • 以下のようなマクロを作成しましたが、文章の最後まで連続置換をしたい場合

    以下のようなマクロを作成しましたが、文章の最後まで連続置換をしたい場合はどうすればよいのでしょうか。 ご教示をお願い致します。 ************************ Selection.Find.ClearFormatting With Selection.Find .Text = "<G>*<M>" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Selection.Font.Name = "MS ゴシック" Selection.Find.ClearFormatting With Selection.Find .Text = "<G>*<M>" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With End Sub ************************