我们在Word2016中有几个使用自定义变量的模板,这些变量应该用我的宏更新,以便在用户更改数据时将数据推送到数据库。
不幸的是,我们有一些用户删除了文档中的变量(文本中不在文件属性中),这意味着数据库不会更新。是否有设置使自定义属性无法从文本中删除?
通过这样做,我不需要遍历文档来查找变量,因为我可以简单地遍历自定义属性:
Public Sub initializeVariablesFromDB(doc As Document, dokID As String)
Dim docProp As Object
Dim rowNumber As Integer
'Get valid properties
If CPearson.IsArrayEmpty(Settings.validPropertiesArray) Then
Settings.validPropertiesArray = Post.helpRequest("xxxxxx?Dok2=1")
End If
'We create the docid just in case....
Call CustomProperties.createCustomDocumentProperty(doc, "_DocumentID", dokID)
'We loop through all custom properties
For Each docProp In doc.CustomDocumentProperties
rowNumber = CPearson.findRownumber(docProp.name, Settings.validPropertiesArray)
If rowNumber <> -1 Then
'we clear all SIGN properties...
If InStr(UCase(docProp.name), "SIGN") > 0 Then
docProp.value = ""
End If
'We check if we should use value from DB
If Settings.validPropertiesArray(rowNumber, 1) = "0" Or InStr(UCase(docProp.name), "DOCUMENTCREATEDDATE") > 0 _
Or InStr(UCase(docProp.name), "DOCUMENTCREATOR") > 0 Or InStr(UCase(docProp.name), "DOCUMENTNAME") > 0 Then
'Update from DB
Call Post.updateDBFromCustomProperties(docId:=dokID, PropertyName:=docProp.name, whoRules:="dBrules", doc:=doc)
End If
End If
Next docProp
End Sub
对于文本中的_DocumentSubject,这将失败,将收集属性的新值,但不再反映在文本中,因为用户删除了文本中的变量,我可以阻止它吗?
答案 0 :(得分:1)
您可以将该字段放入内容控件并锁定内容控件。对MS Word了解得足够多的用户仍然可以删除内容控件,但他们需要采取一些相当深思熟虑的步骤(我猜这些人不是问题)。< / p>
可以将正常字段(包括文档属性)添加到内容控件(可能最好使用富文本)。
你可以把字段放到内容控件中,好像你不能这样做:( - skatun 10小时前
您完全可以 ,请按以下步骤操作( Word 2010 ):
注意:当内容控件完全锁定时,该字段受到保护。这有一个奇怪的副作用,内容控制不允许该字段正常更新...为了解决这个问题,您需要向VBA添加更多代码,如下所示:
Sub UpdateProtectedField()
With ActiveDocument.ContentControls(1)
.LockContents = False
.Range.Fields(1).Update
.LockContents = True
End With
End Sub
答案 1 :(得分:0)
一种可能性是使用连续的断面和保护部分,不是理想的解决方案,因为这样的图像无法格式化等等。