[VBA] Jak poprawnie użyć CustomDocumentProperties?

0

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...

0

czemu sadzisz ze ta wartosc 11... jest nieprawidlowa? jestes pewien ze uwzgledniles wszystkie znaki konca lini etc.?

0

Jestem pewna.
Ale to nie jest istotne, ile dokument ma znaków. Istotne jest to, że funkcja SetProperty jest wywoływana z argumentami "ZNAKI:" oraz "109560".

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.