2017-03-01 26 views
0

I previously asked a question未回答です。私はここを復活させたいと思います。おそらくもう少し簡単です。うまくいけば、その質問に答えることができます。値が範囲外に入るワードフッターVBA

500を超えるドキュメントのフッターで書式を変更する必要があり、手作業では行いたくありません。 空のドキュメントにマクロを記録し、それをクリーンアップし、選択プロパティを使用しないように修正しました。そのコードブロックをコピーして既存のコードに貼り付け、変更する必要のある文書で試したところ、フィールドを挿入できなくなり、「4608値が範囲外です」というエラーが発生しました。私のran1変数の幅をRangeとすると、範囲の定義に型の不一致が生じます。 フッタに実際にフィールドを挿入するには、いくつかの助けが必要です。

以下

は、私は現在で働いていたコードです:

Sub EnterFieldInFooter() 

Dim wor As Object 
Dim fso As Object 
Dim fol As Object 
Dim fil As Object 
Dim doc As Object 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set fol = fso.GetFolder("M:\test") 

Dim ran1 As Object 

i = 3 

Set wor = CreateObject("word.application") 

For Each fil In fol.Files 

    If Right(fil.Name, 4) = ".doc" Or Right(fil.Name, 5) = ".docx" And Left(fil.Name, 2) <> "~$" Then 
     ' open the document 
     Set doc = wor.documents.Open(Filename:=fil.Path) 

     Set ran1= doc.sections.first.footers(1).Range 'footer range 

     ' Set qualifying statement 
     ran1.Text = "This is an uncontrolled document when printed or saved. " & _ 
        "See online database for most recent version." 
     ' Enter the last saved date 
     ran1.InsertAfter (vbCrLf & "Save Date: ") 
     ran1.Collapse Direction:=wdCollapseEnd 
     Set ran1 = doc.sections.first.footers(1).Range 
     ran1.Fields.Add Range:=ran1, Type:=wdFieldEmpty, Text:="SAVEDATE \@ ""yyyy/MM/dd""", PreserveFormatting:=True 
     ' Enter the last printed date 
     Set ran1 = doc.sections.first.footers(1).Range 
     ran1.InsertAfter (vbTab & "Print Date: ") 
     ran1.Collapse Direction:=wdCollapseEnd 
     ran1.Fields.Add Range:=ran1, Type:=wdFieldEmpty, Text:="PRINTDATE \@ ""yyyy/MM/dd""", PreserveFormatting:=True 

     ' Save updated file 
     pat = "M:\test1" & "\" & fil.name 
     doc.saveas pat 

    End If 

Next 

End Sub 
+0

あなたは 'を設定しようとすることができRAN1 = doc.StoryRanges(wdPrimaryFooterStoryは)' – Slai

+0

@Slaiは、コレクションの要求されたメンバーは、VBAの – Jodi

答えて

0

あなたはセクション番号を供給する必要があるので、あなたが見たエラーが発生した可能性があります。これを試してみてください:

Set ran1 = doc.Sections(1).Footers(wdHeaderFooterPrimary).Range 
ran1.Text = "This is an uncontrolled document when printed or saved. " & _ 
       "See online database for most recent version." 
ran1.InsertAfter (vbCrLf & "Save Date: ") 
ran1.Collapse Direction:=wdCollapseEnd 
ran1.fields.Add Range:=ran1, Type:=wdFieldEmpty, Text:="SAVEDATE \@ ""yyyy/MM/dd""", PreserveFormatting:=True 
Set ran1 = doc.Sections(1).Footers(wdHeaderFooterPrimary).Range 
ran1.InsertAfter (vbTab & "Print Date: ") 
ran1.Collapse Direction:=wdCollapseEnd 
ran1.fields.Add Range:=ran1, Type:=wdFieldEmpty, Text:="PRINTDATE \@ ""yyyy/MM/dd""", PreserveFormatting:=True 

ドキュメントの構造によっては、セクション(#)で#とし、wdHeaderFooterPrimarywdHeaderFooterPrimaryをいじる必要があるかもしれません。私はそれが私に語った、ことを使用するときに役立ちます

希望

+0

私のバージョンは存在しません。 'wdHeaderFooterPrimary'文字列でフッタを参照することはできません。' Sections(1).Footers(1) 'を使う必要があります。そうでなければ、コレクションのメンバーが存在しないことを伝えるエラーが発生します。 – Jodi

+0

好奇心使用しているVBAのバージョン[ツール|リファレンス]で、[Microsoft Word ##。#Object Library]が選択されていますか?それで 'wdHeaderFooterPrimary'が定義されています。セクション(1)は助けましたか? – xidgel

+0

ああ、私は、Wordライブラリを有効にすることを考慮していなかったという問題なしに、Excelオブジェクトライブラリのみを有効にして、簡単な文書編集を済ませました。好奇心のために、私はOffice 2010でVBAを使っています。ありがとうございました! – Jodi

関連する問題