2017-09-02 9 views
1

Document.ContentControlsコレクションは、名前による検索、インデックスによるアイテム検索をサポートしていません。タイトル(またはタグ)でContentControlを取得

コードを読み取り可能にするために、ユーザ定義の識別子で特定のContentControlを取得することはできますか。 (例:Content control titles - Ms Office Forumsは、1つずつ試すことができると主張しています)

+0

あなたの情報は正しいですし、あなたが投稿したリンクに解決策があります。このようなコレクションをループするのはとても速いです。以下の回答はOffice 365に適用され、使用しているMS Officeのバージョンでは利用できない場合があります。 – Variatus

+1

@Variatus私は現在、Office 2007の答えでこのソリューションを使用しています。 –

+0

次に、最高のものがあります。なぜあなたはそれについて不平を言うのですか?一度インストールして、それがどのように仕事をするかを忘れるコード内の別の関数でなければなりません。 – Variatus

答えて

3

Document.SelectContentControlsByTitle()Document.SelectContentControlsByTag()の方法があります。

コントロールのいずれのプロパティも一意でないことが保証されているため、両方ともContentControlsの結果を返します。このような関数は、結果が存在し、一意であることを確認するために使用することができます。

Public Function CCSingle(source As ContentControls) As ContentControl 
    Select Case Sgn(source.Count - 1) 
    Case -1 
     '9 = subscript out of range 
     'http://onlinelibrary.wiley.com/doi/10.1002/9781118257616.app3/pdf 
     Call Err.Raise(9, , "Identifier not found") 
    Case 1 
     Call Err.Raise(9, , "Identifier not unique") 
    Case Else 
     Set CCSingle = source.Item(1) 
    End Select 
End Function 
0

コンテンツコントロールは、その.TAGプロパティとその.TITLEプロパティによって識別することができます。ここには単純なものがあります。これは、タイトルとタグの両方に一致するすべてのコンテンツコントロールのセットから最初のコンテンツコントロールを返します。

Function FindCCbyTitleAndTag (Title as string, Tag as string) as ContentControl 
    Dim CC as ContentControl 
    For each CC in ActiveDocument.ContentControls 
    If CC.Title = Title and CC.Tag = Tag then 
     FindCCbyTitleAndTag = CC 
    End If 
    Next CC 
End Function 
関連する問題