我的问题与此帖Extracting the Company property from a Word document using Excel VBA
有些相似我希望提取内容控件属性,而不是MSWord的BuiltinDocumentProperties。
我是VBA的新手,任何可以从MS Word文档中提取内容控制属性的代码片段对我都有很大的帮助。
提前致谢!
答案 0 :(得分:1)
作为首发:考虑有大量的ContentControl Properties
(Word),因此在您的问题中更具体,这将有所帮助,并且肯定会尝试对其进行编码。
此处给出的列表ContentControl Properties (Word)概述了不同的属性,并指出了读写状态。我不会发布链接摘要,但会指出,它会以更清晰的方式详细说明您在对象浏览器中可以看到的内容。
这个article给出了每种类型的一般描述和限制。它更能描述控件的实际用法,并可能有助于您完善代码。
您可以将控件作为集合循环。我已经写了这个用于在Word中实现;您提供的链接将向您展示如何在引用Word的Excel中实现此功能。
Public Sub test()
Dim ContentControl As ContentControl
For Each ContentControl In ThisDocument.ContentControls
Debug.Print ContentControl.Type
Next ContentControl
End Sub
您可以在检查存在的类型(如上所述)之后编写一些代码,然后将属性(如果适用)写出到文本文件或工作表。
探索这个问题的最佳方法可能是打开对象浏览器并针对每个类成员读取相关信息,并在其上下文中编写代码。
如果您想以与您提供的链接相同的方式访问控件,请查看可用的WdContentControlType Enumeration
以下是一个检索项目的简单示例(通过link和Astrid中的@DavidZemens调整代码。为您提供有关如何从Excel访问的10个启动器。请注意这是定制的到一个特定的枚举(8
为wdContentControlCheckBox
),它返回一个布尔值;这就是为什么更好地理解你的目标并看到你的尝试会有所帮助。
Option Explicit
Public cc As Object
Public Sub Testing()
Dim PropVal As Boolean
Const wdContentControlCheckBox As Long = 8
PropVal = ReadProp(wdContentControlCheckBox, "C:\Users\User\Desktop\Test.docm")
MsgBox PropVal
End Sub
Function ReadProp(ByVal sPropName As Long, ByVal FileName As String) As Boolean
Dim wdApp As Object 'Word.Application
Dim doc As Object 'Word.Document
Set wdApp = CreateObject("Word.Application")
Set doc = wdApp.Documents.Open(FileName, ReadOnly:=True)
Dim bCustom As Boolean
Dim sValue As String
On Error GoTo ErrHandlerReadProp
'Try the built-in properties first
'An error will occur if the property doesn't exist
sValue = doc.BuiltinDocumentProperties(sPropName).Value
ReadProp = CBool(sValue)
Exit Function
ContinueCustom:
bCustom = True
Custom:
sValue = doc.CustomDocumentProperties(sPropName).Value
ReadProp = CBool(sValue)
Exit Function
ErrHandlerReadProp:
Err.Clear
'The boolean bCustom has the value False, if this is the first
'time that the errorhandler is runned
If Not bCustom Then
'Continue to see if the property is a custom documentproperty
Resume ContinueCustom
Else
'The property wasn't found, return an empty string
' ReadProp = "" ''Commented out by QHarr
Msgbox "Property not found"
Exit Function
End If
End Function