Говорить, что Undo работает с изменениями документа, не совсем точно. Undo - отмена последнего действия (нескольких действий) содержащегося в Undo-буфере.
Результат Undo проверяется и без On Error:
If ActiveDocument.Undo = False Then MsgBox "Буфер отмены пуст!"
Также можно проверить параметр ActiveDocument.Saved.
Количество элементов в буфере считываем их элементов интерфейса MS Word, т.е. из кнопок "Отменить" и "Вернуть". Это работает во всех версиях MS Word:
Sub A()
Dim U&, R&
If Doc_UndoRedoCount(U, R) Then
MsgBox "Количество элементов в Undo/Redo буфере активного документа: " & vbLf & _
"отмена (undo): " & CStr(U) & vbLf & _
"вернуть (redo): " & CStr(R)
Else
MsgBox "Нет открытых документов!"
End If
End Sub
Public Function Doc_UndoRedoCount( _
Optional ByRef UndoCount As Long, _
Optional ByRef RedoCount As Long) As Boolean
' подсчет количества элементов в Undo и Redo буферах (-1 при ошибке)
' возвращает True, пи успехе
Doc_UndoRedoCount = False
On Error Resume Next
UndoCount = -1
RedoCount = -1
If ActiveDocument Is Nothing Then Exit Function
Doc_UndoRedoCount = True
' список "Отмена"
Const c_ID_Undo& = 128 ' Id списка "Отмена"
Dim undoBtn As CommandBarComboBox
Set undoBtn = Application.CommandBars.FindControl(Id:=c_ID_Undo)
If undoBtn Is Nothing Then
Else
UndoCount = 0
UndoCount = undoBtn.ListCount
End If
' список "Вернуть"
Const c_ID_Redo& = 129 ' Id списка "Вернуть"
Dim redoBtn As CommandBarComboBox
Set redoBtn = Application.CommandBars.FindControl(Id:=c_ID_Redo)
If redoBtn Is Nothing Then
Else
RedoCount = 0
RedoCount = redoBtn.ListCount
End If
End Function
Отредактировано Вождь (25.07.2010 04:38:08)
Макросы под заказ и готовый пакет - mtdmacro.ru