Имеется следующая проблема. Есть Файл_1, который зарезервирован пользователем (т.е. при открытии запрашивается пароль, либо предлагается зайти только "для чтения"). Итого: пользователь, знающий пароль может заходить и вносить изменения, не знающий - может только просматривать. Вариант с защитой книги/листа был отброшен на этапе создания файла по каким-то уже забытым причинам. Скорее всего какой-то из встроенных макросов не работал с защищенным листом.
В последнее время пользователи, которые заходят "посмотреть" файл начали подолгу в нем залипать, и даже не смотря на то, что они зашли в него в режиме "для чтения", у пользователя, который резервировал файл отсутствует возможность зайти в него для редактирования. При открытии файла тоже, к сожалению, не пишет, какой именно нехороший человек залип в файле.
Была мысль прикрутить к файлу макрос: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'ищем последнюю занятую строчку в логах lastrow = Worksheets("Лог").Range("A60000").End(xlUp).Row 'заносим дату-время выхода из файла If lastrow > 1 Then Worksheets("Лог").Cells(lastrow, 3) = Now 'сохраняемся перед выходом ActiveWorkbook.Save End Sub Private Sub Workbook_Open() 'ищем последнюю занятую строчку в логах lastrow = Worksheets("Лог").Range("A60000").End(xlUp).Row 'заносим имя пользователя и дату-время входа в файл Worksheets("Лог").Cells(lastrow + 1, 1) = Environ("USERNAME") Worksheets("Лог").Cells(lastrow + 1, 2) = Now End Sub
[/vba] , чтобы вести лог тех, кто заходит в файл. Однако и тут возникла проблема. Чтобы этот лог сохранился, макрос при закрытии файла пытается его сохранить. Разумеется, когда юзеры входят в него "для чтения", макрос сохранение не отрабатывает, в результате лог не ведется.
Задача: понять кто открывал файл и сколько в нем просидел. (фиксирование системный логин/вход/выход). Может быть где-то в настройках Excel поставить галочку, чтобы он всегда показывал, кто сидит в файле? Если нет, то, может быть можно вывести логирование открытия/закрытия Файла_1 в Файл_2, который не будет защищен резервированием и спокойной будет сохраняться?
Заранее благодарю!
Доброе утро, уважаемые господа!
Имеется следующая проблема. Есть Файл_1, который зарезервирован пользователем (т.е. при открытии запрашивается пароль, либо предлагается зайти только "для чтения"). Итого: пользователь, знающий пароль может заходить и вносить изменения, не знающий - может только просматривать. Вариант с защитой книги/листа был отброшен на этапе создания файла по каким-то уже забытым причинам. Скорее всего какой-то из встроенных макросов не работал с защищенным листом.
В последнее время пользователи, которые заходят "посмотреть" файл начали подолгу в нем залипать, и даже не смотря на то, что они зашли в него в режиме "для чтения", у пользователя, который резервировал файл отсутствует возможность зайти в него для редактирования. При открытии файла тоже, к сожалению, не пишет, какой именно нехороший человек залип в файле.
Была мысль прикрутить к файлу макрос: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'ищем последнюю занятую строчку в логах lastrow = Worksheets("Лог").Range("A60000").End(xlUp).Row 'заносим дату-время выхода из файла If lastrow > 1 Then Worksheets("Лог").Cells(lastrow, 3) = Now 'сохраняемся перед выходом ActiveWorkbook.Save End Sub Private Sub Workbook_Open() 'ищем последнюю занятую строчку в логах lastrow = Worksheets("Лог").Range("A60000").End(xlUp).Row 'заносим имя пользователя и дату-время входа в файл Worksheets("Лог").Cells(lastrow + 1, 1) = Environ("USERNAME") Worksheets("Лог").Cells(lastrow + 1, 2) = Now End Sub
[/vba] , чтобы вести лог тех, кто заходит в файл. Однако и тут возникла проблема. Чтобы этот лог сохранился, макрос при закрытии файла пытается его сохранить. Разумеется, когда юзеры входят в него "для чтения", макрос сохранение не отрабатывает, в результате лог не ведется.
Задача: понять кто открывал файл и сколько в нем просидел. (фиксирование системный логин/вход/выход). Может быть где-то в настройках Excel поставить галочку, чтобы он всегда показывал, кто сидит в файле? Если нет, то, может быть можно вывести логирование открытия/закрытия Файла_1 в Файл_2, который не будет защищен резервированием и спокойной будет сохраняться?
Может быть где-то в настройках Excel поставить галочку, чтобы он всегда показывал, кто сидит в файле?
Тут добавлю, что есть файлы, которые лежат на сетевых дисках и при их открытие пишет логины тех, кто в них уже сидит, а в других файлах пишет что-то вроде "файл занят другим пользователем", без указания - каким конкретно.
Может быть где-то в настройках Excel поставить галочку, чтобы он всегда показывал, кто сидит в файле?
Тут добавлю, что есть файлы, которые лежат на сетевых дисках и при их открытие пишет логины тех, кто в них уже сидит, а в других файлах пишет что-то вроде "файл занят другим пользователем", без указания - каким конкретно.ArkaIIIa
KSV Привет! Дело в том, что в VBA я полный ноль и не знаю, что нужно добавить в вышеуказанный макрос, чтобы он вел лог Файла_1. Более того, я не был уверен, что это реализуемо, и какие условия должны соблюдаться, чтобы велся лог. Например, обязательно ли Файл_2 должен быть открыт, для того, чтобы туда заносились данные об открытии Файла_1.
KSV Привет! Дело в том, что в VBA я полный ноль и не знаю, что нужно добавить в вышеуказанный макрос, чтобы он вел лог Файла_1. Более того, я не был уверен, что это реализуемо, и какие условия должны соблюдаться, чтобы велся лог. Например, обязательно ли Файл_2 должен быть открыт, для того, чтобы туда заносились данные об открытии Файла_1.ArkaIIIa
Dim App As Application Dim wbLog As Workbook Dim nRow As Long
Private Sub Workbook_Open() Dim wbName$ Set App = New Application With App .Visible = False wbName = ThisWorkbook.Name nRow = InStrRev(wbName, ".") If nRow Then wbName = Left$(wbName, nRow - 1) Set wbLog = .Workbooks.Open("C:\Users\User\Downloads\" & wbName & "_Log.xlsx") With wbLog.Worksheets(1) nRow = .Range("A60000").End(xlUp).Row + 1 ' ищем последнюю заполненную строчку в логах .Cells(nRow, 1) = Environ("USERNAME") ' заносим имя пользователя и дату-время входа в файл .Cells(nRow, 2) = Now End With End With End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) With wbLog .Worksheets(1).Cells(nRow, 3) = Now ' заносим дату-время выхода из файла .Close True End With App.Quit End Sub
[/vba]
в папке "C:\Users\User\Downloads\" (путь можете указать свой) должна лежать книга с именем "Книга123_Log.xlsx" (имя открываемого файла + "_Log.xls") с общим доступом.
[p.s.]Или можно вообще все логи (всех открываемых файлов) писать в одну книгу (лог каждого файла на свой лист).[/p.s.]
например, как-нибудь так:
[vba]
Код
Option Explicit
Dim App As Application Dim wbLog As Workbook Dim nRow As Long
Private Sub Workbook_Open() Dim wbName$ Set App = New Application With App .Visible = False wbName = ThisWorkbook.Name nRow = InStrRev(wbName, ".") If nRow Then wbName = Left$(wbName, nRow - 1) Set wbLog = .Workbooks.Open("C:\Users\User\Downloads\" & wbName & "_Log.xlsx") With wbLog.Worksheets(1) nRow = .Range("A60000").End(xlUp).Row + 1 ' ищем последнюю заполненную строчку в логах .Cells(nRow, 1) = Environ("USERNAME") ' заносим имя пользователя и дату-время входа в файл .Cells(nRow, 2) = Now End With End With End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) With wbLog .Worksheets(1).Cells(nRow, 3) = Now ' заносим дату-время выхода из файла .Close True End With App.Quit End Sub
[/vba]
в папке "C:\Users\User\Downloads\" (путь можете указать свой) должна лежать книга с именем "Книга123_Log.xlsx" (имя открываемого файла + "_Log.xls") с общим доступом.
[p.s.]Или можно вообще все логи (всех открываемых файлов) писать в одну книгу (лог каждого файла на свой лист).[/p.s.]KSV
KSV У Вас этот макрос работает нормально? Я создал файл "123_Log.xlsx" (с общим доступом) в папке Downloads, указал путь к папке (вместо User указал свою учетку). Файл физически там есть, но при открытии файла "123", мне пишет что файл "123_Log.xlsx" не найден.
KSV У Вас этот макрос работает нормально? Я создал файл "123_Log.xlsx" (с общим доступом) в папке Downloads, указал путь к папке (вместо User указал свою учетку). Файл физически там есть, но при открытии файла "123", мне пишет что файл "123_Log.xlsx" не найден.ArkaIIIa
KSV Обратил внимание, что информация в лог добавляется только при закрытии Файла_1. Можно ли, чтобы запись об открытии файла делалась сразу при его открытии?
KSV Обратил внимание, что информация в лог добавляется только при закрытии Файла_1. Можно ли, чтобы запись об открытии файла делалась сразу при его открытии?ArkaIIIa
Сообщение отредактировал ArkaIIIa - Среда, 05.08.2015, 11:11
Она (и последующие) создает и запускает ещё один экземпляр приложения Excel, скрывает его окно (нам же не надо, чтобы юзер видел и мог поработать с лог-файлом, не так ли?), и затем уже, в этом "скрытом экземпляре" открывает лог и дописывает в него данные. При закрытии же текущей книги юзера - записывается и закрывается и лог-файл,а также производится закрытие дополнительного экземпляра приложения.
Она (и последующие) создает и запускает ещё один экземпляр приложения Excel, скрывает его окно (нам же не надо, чтобы юзер видел и мог поработать с лог-файлом, не так ли?), и затем уже, в этом "скрытом экземпляре" открывает лог и дописывает в него данные. При закрытии же текущей книги юзера - записывается и закрывается и лог-файл,а также производится закрытие дополнительного экземпляра приложения.AndreTM