Dzieje mi się jakaś dziwna masakra niezrozumiała. Zaprezentuję mój kod:
Function SetProperty(ByVal PropertyName As String, ByVal PropertyValue As Variant) As Boolean
Dim Doc As Document
Dim Prop As Office.DocumentProperty
Dim CProps As Office.DocumentProperties
Dim PropType As Variant
Set Doc = ActiveDocument
Set CProps = Doc.CustomDocumentProperties
On Error Resume Next
Err.Clear
Set Prop = CProps(PropertyName)
If Not Prop Is Nothing Then
'#########################
MsgBox ActiveDocument.CustomDocumentProperties(PropertyName).Value
Prop.Delete
End If
Err.Clear
PropType = msoPropertyTypeString
If IsNull(PropType) = True Then
SetProperty = False
Exit Function
End If
Err.Clear
CProps.Add Name:=PropertyName, LinkToContent:=False, Type:=PropType, Value:=PropertyValue
SetProperty = True
'#################
MsgBox ActiveDocument.CustomDocumentProperties(PropertyName).Value
End Function
Funkcja ta jest wywoływana przy każdym zapisie dla kilku wartości.
Ilekroć bym jej nie wywołała, If Not Prop Is Nothing jest prawdziwe dla tylko jednej z nich. (Zawsze te same wartości próbuję wpisać).
Dziwne, bo przecież drugi MsgBox poprawnie wyświetla wartości...! Co więcej, gdy podglądam strukturę rtfa, widzę, że te propertiesy SĄ wpisane...
Dziwne jest również zachowanie dla tej jednej wartości, którą znajduje. Jest to wartość ZNAKI: i określa liczbę znaków w dokumencie. Za pierwszym wywołaniem funkcji, pierwszy MsgBox odczytuje to co widzę też w strukturze rtfa: 1166429. Z tymże to nie jest prawidłowa wartość, dlatego próbuję ją nadpisać przez prawidłowe: 109560. Drugie MsgBox wyświetla poprawnie: 109560. Drugie wywołanie funkcji daje już w obu MsgBox 109560 - super! Ale... w strukturze rtfa wciąż widzę wpisane 1166429. Wartość się tak naprawdę nie zmienia. Po zamknięciu dokumentu i ponownym uruchomieniu znów pierwszy MsgBox daje 1166429...