Страницы: 1
RSS
Предупреждение о том, что книга открыта другим пользователем
 
Книга НЕ в общем доступе (вкладка Рецензирование-Доступ к книге, снята галка "Разрешать изменять файл нескольким пользователям").
Если такая книга открыта, то другой пользователь, открывающий книгу, видит сообщение:

Пользователь игнорирует его, меняет/форматирует, через какое-то время пытается сохранить свою работу... не тут-то было! А спешить надо медленно.. Надо внимательно читать предупреждение. И такая ситуация не выдуманная - обратились с просьбой решить проблему.

Для таких вот быстрых придумалась простенькая доработка. Авось кому-то еще понадобится.
Возможный недостаток: автосохранение книги при закрытии (не всегда это нужно). Имена пользователей должны быть разные.
Скрытый текст

Смысл такой.
Ячейка для сообщения. При закрытии книги пользователем, который открыл ее первым, ячейка очищается, т.е. в закрытой книге ячейка пустая.
Открывается закрытая книга. Макрос проверяет ячейку. Там пусто, в ячейку заносится сообщение "В книге работает Вася", книга сохраняется.
Открывается открытая книга. Макрос проверяет ячейку. Ячейка заполнена, значит, менять там ничего не нужно.

Результат: сообщение всегда показывает имя пользователя, который открыл книгу первым. И если уж при этом товарищ будет терять время - его проблема )

В модуль ЭтаКнига
Код
Private Sub Workbook_Open()
    With ws0
        If .Range("K2").Value = "" Then
            .Range("K2").Value = "В книге работает" & Chr$(10) & Application.UserName
        End If
    End With
    
    Call SaveBook
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ws0.Range("K2:K14").ClearContents
    Call SaveBook
End Sub

В общий модуль
Код
Sub SaveBook()
    Application.DisplayAlerts = False
    ThisWorkbook.Save
    Application.DisplayAlerts = True
End Sub

ws0 - внутреннее имя листа, можно заменить на видимое: Worksheets("лист1")
 
vikttur, Вить, я что-то не понял, Если книга кем-то открыта ранее, то она в режиме Read-only это и можно обрабатывать, включая то что можно вытянуть инфу про того кто в книге работает в режиме полного доступа.  Далее, допустим тот кто по праву редактирует книгу  и закрыл файл не штатно, перезагрузил ПК, просто убил процесс. соответственно  Workbook_BeforeClose не отработает. В результате и в файле не корректная инфа и файл развязки остался.
Изменено: БМВ - 14.05.2020 20:30:59
По вопросам из тем форума, личку не читаю.
 
Ха! Даже не подумал об этом. Уперся в "книга открыта"...
Спасибо. И проще, и надежнее
Код
    ws0.Range("K2:K14").ClearContents

    With ActiveWorkbook
        If .WriteReserved = True Then
            ws0.Range("K2").Value = "В книге работает" & Chr$(10) & .WriteReservedBy
        End If
    End With


У меня нет картинки с красными ушами )
 
Вить а может тогда еще изменения на листе обрабатывать и если ThisWorkbook.WriteReserved = True то алертить про то что изменять не стоит - бесполезно.

if .WriteReserved = True Then - это ты сильно загнул, чтоб наверняка, а то вдруг в Boolean  там AboutTrue  :-)  
Изменено: БМВ - 14.05.2020 22:03:00
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх