2017-09-02 53 views
1

Document.ContentControls集合不支持按名称检索项目,仅按索引检索。按标题(或标记)获取ContentControl

我仍然可以通过用户定义的标识符获得特定的ContentControl以保持代码可读? (例如Content control titles - Ms Office Forums声称只能逐一尝试)

+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