- 締切済み
フォルダ内の複数のファイルで置換したい
お世話になります。 現在、フォルダ内に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です。 足りない情報等ございましたらご指摘願います。 どうぞよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- watabe007
- ベストアンサー率62% (476/760)
こんにちは >With ws.PageSetup >If .LeftFooter = "2009-11-30" Then .LeftFooter = "2009-12-22" >If .CenterFooter = "2009-11-30" Then .CenterFooter = "2009-12-22" >If .RightFooter = "2009-11-30" Then .RightFooter = "2009-12-22" >End With >エクセルはフッタの左側にあり、 >そこには他の文字も含まれています。 なのでフッター値を一旦、変数に取得して置換えれば良いでしょうね With ws.PageSetup myFooter = .LeftFooter myFooter = Replace(myFooter, "2009-11-30", "2009-12-22") .LeftFooter = myFooter End With ワードは Set objWord = CreateObject("Word.Application") Set objDoc = objWord.Documents.Open("G:\Test.doc") With objDoc.Sections(1).Headers(1) myHeader = .Range.Text myHeader = Replace(myHeader, "2009-11-30", "2009-12-22") .Range.Text = myHeader End With objDoc.Close True を参考に
- AKARI0418
- ベストアンサー率67% (112/166)
横槍失礼いたします。 こんな感じでしょうか、watabe007様のコードを流用させていただきました。 Dim objExcel Dim wb, ws Dim dirPath As String Dim strFilePath As String Set objExcel = CreateObject("Excel.Application") 'objExcel.Visible = True '処理中Excelを表示したいのなら先頭の' を消してください。 With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then dirPath = .SelectedItems(1) & "\" Else Exit Sub End If End With ' 先頭のファイル名の取得 strFilePath = Dir(dirPath & "*.xls", vbNormal) ' ファイルが見つからなくなるまで繰り返す Do While strFilePath <> vbNullString Set wb = objExcel.Workbooks.Open(dirPath & strFilePath) For Each ws In wb.Worksheets With ws.PageSetup If .LeftFooter = "2009-11-30" Then .LeftFooter = "2009-12-22" If .CenterFooter = "2009-11-30" Then .CenterFooter = "2009-12-22" If .RightFooter = "2009-11-30" Then .RightFooter = "2009-12-22" End With Next wb.Close True 'Test.xls 変更を保存して閉じる ' 次のファイル名を取得 strFilePath = Dir() Loop objExcel.Quit 'Excelを終了 Set objExcel = Nothing MsgBox "処理しました。"
- watabe007
- ベストアンサー率62% (476/760)
Excelの単体ファイルC:\Test.xlsでフッターの置換をしました。 参考になれば Dim objExcel Dim wb, ws Set objExcel = CreateObject("Excel.Application") 'objExcel.Visible = True '処理中Excelを表示したいのなら先頭の' を消してください。 Set wb = objExcel.Workbooks.Open("C:\Test.xls") For Each ws in wb.WorkSheets With ws.PageSetup If .LeftFooter = "2009-11-30" Then .LeftFooter = "2009-12-22" If .CenterFooter = "2009-11-30" Then .CenterFooter = "2009-12-22" If .RightFooter = "2009-11-30" Then .RightFooter = "2009-12-22" End With Next wb.Close True 'Test.xls 変更を保存して閉じる objExcel.Quit 'Excelを終了 Set objExcel = Nothing MsgBox "処理しました。"
お礼
回答どうもありがとうございます! こちらを試してみたのですが、これは全てのファイル名を この中で指定しないといけないんですよね? ファイルが数十個ある場合は、どうすればよいのでしょうか?
補足
watabe007様の内容を見て気づきました。 補足です。 ワードはヘッダに変更箇所があります。 エクセルはフッタの左側にあり、 そこには他の文字も含まれています。