Есть код предоставленный мне пользователем 2version
Он работает так что если в файле кто-то есть, второй пользователь уже зайти не сможет. Но есть один нюанс, если второй пользователь заходит в файл ему выдаётся сообщение что в файле кто-то есть и файл закрывается, но и при этом удаляется файл lock.txt, при этом первый пользователь работает в файле и ещё его не закрыл. В общем код срабатывает только раз скажем так.
Как сделать так чтобы тот кто его открыл и создал lock.txt тот и удалит при закрытие?
Понимаю вопрос сложный но всё же может как то можно!
[vba]
Код
Private Sub Workbook_Open() Dim lockFile As String lockFile = ThisWorkbook.Path & "\lock.txt"
' Проверяем, существует ли файл lock.txt If Dir(lockFile) <> "" Then MsgBox "Файл уже открыт другим пользователем!", vbExclamation, "Доступ запрещен" ThisWorkbook.Close False Exit Sub End If
' Создаем lock-файл Open lockFile For Output As #1 Print #1, "Locked" Close #1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) ' Удаляем lock-файл при закрытии книги On Error Resume Next Kill ThisWorkbook.Path & "\lock.txt" On Error GoTo 0 End Sub
[/vba]
Есть код предоставленный мне пользователем 2version
Он работает так что если в файле кто-то есть, второй пользователь уже зайти не сможет. Но есть один нюанс, если второй пользователь заходит в файл ему выдаётся сообщение что в файле кто-то есть и файл закрывается, но и при этом удаляется файл lock.txt, при этом первый пользователь работает в файле и ещё его не закрыл. В общем код срабатывает только раз скажем так.
Как сделать так чтобы тот кто его открыл и создал lock.txt тот и удалит при закрытие?
Понимаю вопрос сложный но всё же может как то можно!
[vba]
Код
Private Sub Workbook_Open() Dim lockFile As String lockFile = ThisWorkbook.Path & "\lock.txt"
' Проверяем, существует ли файл lock.txt If Dir(lockFile) <> "" Then MsgBox "Файл уже открыт другим пользователем!", vbExclamation, "Доступ запрещен" ThisWorkbook.Close False Exit Sub End If
' Создаем lock-файл Open lockFile For Output As #1 Print #1, "Locked" Close #1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) ' Удаляем lock-файл при закрытии книги On Error Resume Next Kill ThisWorkbook.Path & "\lock.txt" On Error GoTo 0 End Sub
otpbnvem, добавьте публичную переменную, которую задавайте при открытии если файл занят, и используйте при закрытии.
[vba]
Код
Dim fl As Boolean
Private Sub Workbook_Open() Dim lockFile As String lockFile = ThisWorkbook.Path & "\lock.txt"
' Проверяем, существует ли файл lock.txt If Dir(lockFile) <> "" Then MsgBox "Файл уже открыт другим пользователем!", vbExclamation, "Доступ запрещен" fl = True ThisWorkbook.Close False Exit Sub End If
' Создаем lock-файл Open lockFile For Output As #1 Print #1, "Locked" Close #1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) If Not fl Then ' Удаляем lock-файл при закрытии книги On Error Resume Next Kill ThisWorkbook.Path & "\lock.txt" On Error GoTo 0 End If End Sub
[/vba]
otpbnvem, добавьте публичную переменную, которую задавайте при открытии если файл занят, и используйте при закрытии.
[vba]
Код
Dim fl As Boolean
Private Sub Workbook_Open() Dim lockFile As String lockFile = ThisWorkbook.Path & "\lock.txt"
' Проверяем, существует ли файл lock.txt If Dir(lockFile) <> "" Then MsgBox "Файл уже открыт другим пользователем!", vbExclamation, "Доступ запрещен" fl = True ThisWorkbook.Close False Exit Sub End If
' Создаем lock-файл Open lockFile For Output As #1 Print #1, "Locked" Close #1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) If Not fl Then ' Удаляем lock-файл при закрытии книги On Error Resume Next Kill ThisWorkbook.Path & "\lock.txt" On Error GoTo 0 End If End Sub
Hugo, при всем уважении, что за бред? Переменная доступна только для сессии конкретного пользователя. Если держать это в ячейке, то нужно сразу записать после смены, при этом по том при закрытии без сохранения - имеем вариант, когда нет доступа к файлу ни у кого, без определенного шаманства. Хотя я не уверен что и вариант с флагом в виде файла рабочий на 100%.
Hugo, при всем уважении, что за бред? Переменная доступна только для сессии конкретного пользователя. Если держать это в ячейке, то нужно сразу записать после смены, при этом по том при закрытии без сохранения - имеем вариант, когда нет доступа к файлу ни у кого, без определенного шаманства. Хотя я не уверен что и вариант с флагом в виде файла рабочий на 100%.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
bmv98rus, не спешите. Нам и нужно для одного пользователя - ведь если он при открытии файла получил отказ - то он не имеет права при закрытии удалять файл.
bmv98rus, не спешите. Нам и нужно для одного пользователя - ведь если он при открытии файла получил отказ - то он не имеет права при закрытии удалять файл.Hugo
Предлагаю создавать файл уникальный для каждого пользователя но с общим началом, типа lock_UserName или lock_датавремя открытие проверяем по наличии файла lock*, а закрывает каждый свой, с проверкой на наличие
Предлагаю создавать файл уникальный для каждого пользователя но с общим началом, типа lock_UserName или lock_датавремя открытие проверяем по наличии файла lock*, а закрывает каждый свой, с проверкой на наличиеbigor
Сообщение отредактировал bigor - Воскресенье, 02.02.2025, 17:43
bmv98rus, Hugo, Тут Hugo прав, лично проверил работает, я запускаю файл, создаётся файл, и если запустить workbook_open через VBA уже получаешь отказ что файл занят и всё это на одном ПК происходит, пока не тестил на двух ПК!!! Точно не знаю что получится...
bmv98rus, Hugo, Тут Hugo прав, лично проверил работает, я запускаю файл, создаётся файл, и если запустить workbook_open через VBA уже получаешь отказ что файл занят и всё это на одном ПК происходит, пока не тестил на двух ПК!!! Точно не знаю что получится...astepaaa