2014-01-19 8 views
2

Я работаю над документом excel для составления расписаний сотрудников для моей работы с использованием excel 2010. Одной из проблем, которые мы постоянно имеем, является то, что пользователь может иметь рабочая книга открыта и забудет закрыть ее, прежде чем они уйдут. Они все еще регистрируются на компьютере (общий компьютер), но этот профиль пользователя заблокирован, а другой пользователь входит в систему. Используемый файл хранится на сетевом диске, поэтому его можно заблокировать на разных компьютерах или на том же компьютере, текущий пользователь, который хочет получить к нему доступ, использует. Конечно, если книга была оставлена ​​открытой, новый пользователь не может вносить изменения. Мне было интересно, есть ли способ добавить код в документ, чтобы я мог поместить кнопку, которая закроет экземпляр рабочей книги, который все еще открыт другим пользователем, возможно, предоставив текущему пользователю возможность сохранить его или нет, затем закройте и откройте книгу, которую открыл текущий пользователь, чтобы получить доступ к изменениям? Дайте мне знать, если мне нужно что-то разъяснить для вас. Спасибо!Закройте книгу excel, открытую другим пользователем на том же компьютере, используя VBA

ответ

3

Вы можете сделать некоторые трюк. Основная идея заключается в том, чтобы закрыть книгу, если никто не изменил выбор ячеек (т. Е. Выберите A1 или другую ячейку) в примере в течение 10 минут.

1) добавить этот код в модуль VBA:

Public lastSelectionChange As Date 

Sub closeWB() 
    If DateDiff("n", lastSelectionChange, Now) > 10 Then 
     ThisWorkbook.Close SaveChanges:=True 
    Else 
     Application.OnTime Now + TimeSerial(0, 10, 0), "closeWb" 
    End If 
End Sub 

2) добавить следующий код в ThisWorkbook модуля:

Private Sub Workbook_Open() 
    lastSelectionChange = Now 
    closeWB 
End Sub 

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    lastSelectionChange = Now 
End Sub 

Функция closeWb будет вызывается каждые 10 минут (Application.OnTime Now + TimeSerial(0, 10, 0), "closeWb" это сделать) и проверьте, было ли последнее изменение выбора более 10 минут назад. Если да, тогда закройте wb.

+1

Спасибо! Закрытие таймера - это не совсем то, что я искал, но я думаю, что его ближайшая вещь есть. Я ценю помощь. – Jason247

0

Это будет очень серьезная проблема безопасности в операционной системе. Возможность взаимодействия с другими файлами пользователей и запущенными программами.

Однако, вы могли бы иметь текущий пользователь сделать «Save-как» или создать копию и продолжить оттуда

+0

Да, я подумал, что это может быть длинный выстрел, но я думал, что все равно спрошу. Я надеялся избежать метода save-as, потому что это очень хлопотно. В большинстве случаев человек, который блокирует книгу, - это тот, кому нет необходимости редактировать его, возможно, он просто просматривал данные. – Jason247

Смежные вопросы