2017-10-23 11 views
0

私は、ユーザーがテンプレートに基づいて新しい文書を作成するときにポップアップする単語入力フォームを持っています。ユーザーが必要な情報を入力すると、この情報は、ブックマークを使用してテンプレートに必要な場所に正しく配置されます。以下のコードは、必要な情報を収集して入力します。次に、挿入タブの相互参照オプションを使用して、テンプレートのさまざまな場所でこれらのブックマークを相互参照します。ただし、相互参照フィールドは、提供される情報と一致するように更新されません。ここでクロスリファレンスマクロ生成されたブックマーク

は私がフォームから情報を収集し、ブックマークでそれを埋めるために使用していたコードです:

Private Sub OK_Click() 

    Dim UnitName As Range 
    Set UnitName = ActiveDocument.Bookmarks("UnitName").Range 
    UnitName.Text = Me.AgisanangUnitNameInput.Value 

    Dim OrderNo As Range 
    Set OrderNo = ActiveDocument.Bookmarks("OrderNo").Range 
    OrderNo.Text = Me.OrderNoInput.Value 

    Dim ItemNo As Range 
    Set ItemNo = ActiveDocument.Bookmarks("ItemNo").Range 
    ItemNo.Text = Me.ItemNoInput.Value 

    Dim Reference As Range 
    Set Reference = ActiveDocument.Bookmarks("Reference").Range 
    Reference.Text = Me.ReferenceInput.Value 

    Dim DocumentNo As Range 
    Set DocumentNo = ActiveDocument.Bookmarks("DocumentNo").Range 
    DocumentNo.Text = Me.DocumentNoInput.Value 

    Dim RevisionNo As Range 
    Set RevisionNo = ActiveDocument.Bookmarks("RevisionNo").Range 
    RevisionNo.Text = Me.RevisionNoInput.Value 

    Dim ProjectName As Range 
    Set ProjectName = ActiveDocument.Bookmarks("ProjectName").Range 
    ProjectName.Text = Me.ProjectNameInput.Value 

    Dim PreparedFor As Range 
    Set PreparedFor = ActiveDocument.Bookmarks("PreparedFor").Range 
    PreparedFor.Text = Me.PreparedForInput.Value 

    Dim Classification As Range 
    Set Classification = ActiveDocument.Bookmarks("Classification").Range 
    Classification.Text = Me.ClassificationInput.Value 

    Dim DocumentType As Range 
    Set DocumentType = ActiveDocument.Bookmarks("DocumentType").Range 
    DocumentType.Text = Me.DocumentTypeInput.Value 

    Dim TitleOfReport As Range 
    Set TitleOfReport = ActiveDocument.Bookmarks("TitleOfReport").Range 
    TitleOfReport.Text = Me.TitleOfReportInput.Value 

    Me.Repaint 
    ReportInputForm.Hide 

End Sub 

答えて

0

はこのような何かを試してみてください。

Dim Rng As Range 

For Each Rng In ActiveDocument.StoryRanges 
    With Rng 
     If .Fields.Count Then .Fields.Update 
    End With 
Next Rng 

あなたは(ヘッダーやフッターなど)いくつかのStoryRangesを除外することで、この原則を制限および/またはのみ選択型またはだけでも、個々のフィールドを更新することができます。

ところで、より一般的なコーディング形式では、処理される内容の概要のように、コードの先頭にすべてのDimステートメントがあります。ブロック内のオブジェクトに値を割り当てると、その目的のためにループを使用してドアを開くことになります。そうすることで、3ブロック目の宣言に終わるでしょう。そのすべては、現在の配置の正確な転置です。

+0

を!参照元が見つかりません。 –

+1

ハハ。その意図は、あなた自身のコーディングを手助けすることでした。 StoryRangesのいずれかに更新するフィールドがない場合、エラーが発生します。この種のエラーを回避する方法を示すために、スニペットを修正しました。 – Variatus

0

問題は、テキストを追加しているときに意図せずにブックマークが削除されているということです。つまり、エラーです。これをチェックするには、コード(F8)を実行し、ブックマークの範囲にテキストを割り当てる前と後にブックマークの数を数えます。ブックマーク「を保存する」に使用するパターンを経由して

、あなたはこれを行うことができます。エラー:私は次のエラーを取得する

Sub preserveBookMark() 
    Dim rng As Range 
    Dim bmName As String 

    bmName = "UnitName" 
    Set rng = ActiveDocument.Bookmarks(bmName).Range 

    rng.Text = Me.AgisanangUnitNameInput.Value ' deletes the bookmark 
    rng.Bookmarks.Add ("bmName")    ' re-add deleted bookmark 

    activedocument.Fields.Update 
End Sub 
関連する問題