2

ホットキーが押されたときに、提供された自動スタイルで目次を挿入するマクロをMicrosoftWord2007で定義したいと思います。次のように、スタイルが設定されていない(たとえば基本的な)目次を挿入するマクロを正常に定義しました。

Sub InsertTableOfContents()
'
' InsertTableOfContents Macro
'
'
    With ActiveDocument
        .TablesOfContents.Add Range:=Selection.Range, RightAlignPageNumbers:= _
            True, UseHeadingStyles:=True, UpperHeadingLevel:=1, _
            LowerHeadingLevel:=3, IncludePageNumbers:=True, AddedStyles:="", _
            UseHyperlinks:=True, HidePageNumbersInWeb:=True, UseOutlineLevels:= _
            True
        .TablesOfContents(1).TabLeader = wdTabLeaderDots
        .TablesOfContents.Format = wdIndexIndent
    End With
End Sub

ただし、次のようにスタイル付きの目次を挿入しようとすると、次のようになります。

Sub InsertStyledTOC()
'
' Macro to insert a table of contents styled like Automatic Table 2
'
ActiveDocument.AttachedTemplate.BuildingBlockEntries("Automatic Table 2"). _
    Insert Where:=Selection.Range, RichText:=True
End Sub

次のエラーが発生します。

実行時エラー5941要求されたコレクションのメンバーが存在しません

これは、の参照メンバーBuildingBlockEntries(自動表2など)が存在しないことを示していると思いますが、その理由や修正方法がわかりません。

お手伝いありがとう

編集-提案されているように、アプリケーションのデフォルトのビルディングブロックテンプレートへのファイルパスを使用しようとしました:

Application.Templates("C:\Program Files\Microsoft Office\Office12\Document Parts\1033\Building Blocks.dotx").BuildingBlockEntries("Automatic Table 2").Insert Where:=Selection.Range _ , RichText:=True

ただし、それでもエラーが発生します。Run-time error 5941 The requested member of the collection does not exist

4

1 に答える 1

1

あなたのコードは、ビルディングブロックが添付のテンプレートにあることを期待しています。これは、特別なことを何もしていない場合は、おそらくNormal.dotmです。Microsoftは、実際には組み込みのビルディングブロックを別のテンプレートに格納しています。マクロを記録すると、このテンプレートがどこにあるかがわかります(私のものは「C:\ Users \ owner \ AppData \ Roaming \ Microsoft \ Document Building Blocks \ 1033 \ 14 \ Built-In BuildingBlocks.dotx」にあります) 。

したがって、2つのオプションがあります。Templatesコレクションを使用してそのテンプレートにアクセスし、そこからビルディングブロックを挿入できます(ここではマクロレコーダーが友達です)。または、ビルディングブロックをNormal.dotmに保存して、アクセスを少し簡単にすることもできます。これを行うには、[挿入]>[クイックテキスト]>[建物ブロック]をクリックし、リストでビルディングブロックを見つけて、そのプロパティを編集し、[標準]に保存します。そうすれば、コードは機能するはずです(私は2010年を持っていますが、これはかなり似ていると思います)。

これはあなたのためだけのものであり、配布する必要のあるものではないと仮定すると、これら2つのオプションの実際の違いはわかりません。

マクロレコーダーから取得したコードを追加するために編集しました。

    Application.Templates( _
    "C:\Users\owner\AppData\Roaming\Microsoft\Document Building Blocks\1033\14\Built-In Building Blocks.dotx" _
    ).BuildingBlockEntries("Automatic Table 2").Insert Where:=Selection.Range _
    , RichText:=True

したがって、InsertStyledTOCのコードをそれに置き換えてみてください。

于 2013-02-28T22:59:42.397 に答える