Вождь пишет:Пишу код для самопроверки: тот ли это документ, или его уже подправили. Что-то типа контрольной суммы, но попроще и побыстрее.
Вот пример подпрограммы, вычисляющей контрольную сумму (четыре 16-ричных символа). Источник - внешняя ссылка.
Использовать можно так: при закрытии файла (через событие Document_Close) вызывать подпрограмму подсчета контрольной суммы и результат записывать в подходящее свойство документа (одно из вами перечисленных), затем сохранять документ. При открытии документа (Document_Open) можно снова вычислять контрольную сумму и сравнивать с тем, что было сохранено ранее: если есть расхождение - то файл был изменен (и реагировать, как вам нужно, напр., сообщать об этом). Разумеется, VBA-код закрытия и открытия должен срабатывать только у вас.
При желании можно найти аналогичный алгоритм и для 32-х, 64-х и т.д. вычисления контрольной суммы.
Вот VBA-код макроса (CRC16) и пример подпрограммы его использования (это упрощенный подход, правильнее, конечно, было бы обойти текст всех Story; кроме того, очевидно, что смена любой картинки в документе не отразится на его контрольной сумме) :
Sub test_crc16()
Dim scrc As String
scrc = CRC16(ActiveDocument.Range.Text)
End Sub
Function CRC16(txt As String)
Dim x As Long
Dim mask, i, j, nC, Crc As Integer
Dim c As String
Crc = &HFFFF
For nC = 1 To Len(txt)
j = Val("&H" + Mid(txt, nC, 2))
Crc = Crc Xor j
For j = 1 To 8
mask = 0
If Crc / 2 <> Int(Crc / 2) Then mask = &HA001
Crc = Int(Crc / 2) And &H7FFF: Crc = Crc Xor mask
Next j
Next nC
CRC16 = Hex$(Crc)
End Function