Как посмотреть кто сидит в файле excel
Перейти к содержимому

Как посмотреть кто сидит в файле excel

  • автор:

Excel файл занят другим пользователем, как узнать кем именно?

Имеется шара в сети с excel файлом. Когда в нем кто то работает у другого пользователя появляется диалоговое окном «Файл занят и ФИО пользователя». Но временами просто выводит что «файл занят другим пользователем»
Как можно включить что бы постоянно отображалось ФИО работающего с файлом?
Все действие в доменной среде. Доступ к папке имеет 12 пользователей на чтение и запись.

  • Вопрос задан более трёх лет назад
  • 15467 просмотров

Комментировать
Решения вопроса 1

Возможно, ФИО показывает у тех, кто заполнил это поле в параметрах.
Заставьте всех пользователей внести ФИО в параметрах и будете знать каждого занимающего файл.

Ответ написан более трёх лет назад
Нравится 1 3 комментария
NoobStar @NoobStar Автор вопроса
Это поле автоматом заполняется при использование Office

Артём, вот прямо сейчас в параметрах Excel у меня в имени пользователя стоит «1». Само собой все созданные мной Файлы в имени пользователя имеют «1». И когда я открываю его на сетевом диске, остальные видят «1».

Артём, автоматом заполняется в файле тем, что вы укажете в параметрах excel. Напишите «Кузькина мать», она и будет автором )))

Отслеживание входа пользователей в книгу Excel

Добавим в нашу книгу новый лист, куда будет записываться информация о всех пользователях и назовем его, например, Лог. На нем создадим простую шапку будущего журнала учета посетителей:

blackbox1.png

Этап 2. Макросы фиксации входа-выхода

Теперь добавим макросы для записи на лист Лог даты-времени и имен пользователей при открытии и закрытии книги. Для этого нужно открыть редактор Visual Basic с помощью сочетания Alt+F11 или с помощью кнопки Visual Basic на вкладке Разработчик (Developer) и найти в левом верхнем углу панель Project (если она не отображается, то включить ее можно сочетанием клавиш Ctrl+R):

blackbox2.png

Двойным щелчком откройте модуль ЭтаКнига (ThisWorkbook) и вставьте туда пару наших макросов для обработки событий открытия и закрытия книги:

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

В первом приближении все уже должно работать. Попробуйте открыть-закрыть этот файл пару раз и убедитесь, что на лист Лог попадает ваше имя пользователя (логин входа в Windows) и дата-время:

blackbox3.png

Этап 3. Улучшаем надежность

Можно было бы скрыть лист Лог и на этом остановиться, но есть одно «но»: если у пользователя, который открывает нашу книгу, макросы разрешены по умолчанию либо он сам их разрешает, нажав в окне предупреждения на кнопку Включить содержимое, то все в порядке:

blackbox4.png

Но что если пользователь не разрешит выполнение макросов или они отключены у него по умолчанию? Тогда наши макросы отслеживания выполняться не будут и фиксации имени и даты не произойдет 🙁 Как же заставить пользователя разрешить использование макросов?

Чтобы обойти эту проблемку воспользуемся небольшой тактической хитростью. Добавьте в нашу книгу еще один чистый лист, назовите его Предупреждение и вставьте на него следующий текст:

blackbox5.png

Суть в том, чтобы по умолчанию скрыть в книге все листы кроме этого, а рабочие листы с данными отображать с помощью специального макроса. Если пользователь не разрешил выполнение макросов, то он увидит в книге только один лист с предупреждением. Если же макросы разрешены, то наш макрос обработки события открытия книги скроет лист с предупреждением и отобразит листы с данными. Чтобы пользователь сам не отобразил их — используем суперскрытие вместо обычного скрытия листов (параметр xlSheetVeryHidden вместо обычного False).

Чтобы реализовать все описанное, слегка изменим наши процедуры в модуле ЭтаКнига (ThisWorkbook):

Private Sub Workbook_BeforeClose(Cancel As Boolean) 'ищем последнюю занятую строчку в логах lastrow = Worksheets("Лог").Range("A60000").End(xlUp).Row 'заносим дату-время выхода из файла If lastrow > 1 Then Worksheets("Лог").Cells(lastrow, 3) = Now 'скрываем все листы, кроме листа ПРЕДУПРЕЖДЕНИЕ Worksheets("Предупреждение").Visible = True For Each sh In ActiveWorkbook.Worksheets If sh.Name = "Предупреждение" Then sh.Visible = True Else sh.Visible = xlSheetVeryHidden End If Next sh 'сохраняемся перед выходом 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 'отображаем все листы For Each sh In ActiveWorkbook.Worksheets sh.Visible = True Next sh 'скрываем листы ПРЕДУПРЕЖДЕНИЕ и ЛОГ Worksheets("Предупреждение").Visible = xlSheetVeryHidden Worksheets("Лог").Visible = xlSheetVeryHidden End Sub

Чтобы просмотреть скрытый Лог откройте редактор VisualBasic (Alt+F11), выделите лист на панели Project и измените его видимость на панели Properties, используя свойство Visible:

blackbox7.png

Если пользователи настолько продвинутые, что знают про суперскрытые листы и могут их отобразить через редактор Visual Basic или нарушить работу наших макросов, то можно дополнительно поставить пароль на просмотр и изменение макросов. Для этого щелкните правой кнопкой мыши по имени файла в панели Project (строка VBAProject (blackbox.xls)), выберите команду VBA Project Properties и включите флажок Lock project for viewing и задайте пароль на вкладке Protection:

blackbox8.png

Теперь точно никто не уйдет безнаказанным. Большой Брат следит за тобой! 😉

Ссылки по теме

  • Суперскрытый лист
  • Выборочное отображение листов отдельным пользователям
  • 4 способа защиты данных в Microsoft Excel

Excel. Как узнать кем открыт файл для чтения\записи? , ..xlsx..

Здравствуйте! Имеется файл в общем доступе с расширением .xlsx как узнать кем он открыт? Раньше был файл созданный в Exel2003 с расширением xls. Так вот, при его открытии, если кем то уже был открыт данный файл, выходила табличка, что Иванов\Петров\Сидоров уже используют этот файл. При чем имя пользователя бралось отсюда(exel2007): Значек Office — Параметры Exel — Основные — Личная настройка Microsoft Office — Имея пользователя: Иванов\Петров\Сидоров. Тогда пользователь просто просил другого пользователя выйти из файла и сам заходил с правами редактирования. После перехода на файл созданный в офисе2007 и выше, пишет
«Редактирование ‘имя файла’ запрещено пользователем ‘другой пользователь’

Так вот, как узнать кто скрывается под именем ‘другой пользователь’. По этому пути ( Значек Office — Параметры Exel — Основные — Личная настройка Microsoft Office — Имея пользователя: Иванов\Петров\Сидоров.) Фамилия и имя так же прописаны.

Пока вижу два варианта:
1) Переконвертировать в формат Exel2003.
2) Создать скрипт. НО, хотелось бы без скриптов.

Jan 17 2014, 21:58 [ показать ]
Отправлено #2

Сообщений: 7 777

Если опубликовать посредством IIS , то можно мониторить — кто осуществлял доступ. ИнтрАнет — технологии с доступом к данным через SQL — кроссплатформенный вариант. Если б хотели, то всем бухгалтериям хватало бы открытой ОС с браузером в качестве унифицированного клиента и всё.
Тот же xml — формат, для того и придумывался.

Как посмотреть кто сидит в файле excel

В макросе открываю книгу для записи в неё. Проверяю, что она открыта для записи. А вот если в ней уже кто-то работает, то мне надо узнать имя компа и имя пользователя того, кто уже в ней.
Подскажите, плз, есть ли какой-нибудь способ узнать это VBA?

Сообщений: 61042 Регистрация: 14.09.2012
Контакты см. в профиле
29.10.2009 11:25:20

Стасон, я набрал в окошке поиска почти целиком Ваш запрос: как узнать — кто уже открыл файл. Не поверите — тема обсуждалась, есть решения. Вам ссылки скопировать сюда или лучше на почтовый ящик?

29.10.2009 12:49:52

Стасон, я набрал в окошке поиска почти целиком Ваш запрос: как узнать — кто уже открыл файл. Не поверите — тема обсуждалась, есть решения. Вам ссылки скопировать сюда или лучше на почтовый ящик?

Юрий, спасибо за содержательный ответ. Я не поверил — проверил ещё раз в поиске. Действительно есть похожие тему. Решений — нет. Может быть дело в том, что я не совсем корректно задал вопрос? Попробую ещё раз.

Можно ли средствами VBA узнать сетевое имя компьютера, с которого открыли «для записи» файл, который я открыл позже «только для чтения»?

Сообщений: 61042 Регистрация: 14.09.2012
Контакты см. в профиле
29.10.2009 12:54:05

Стасон, в своё время ZVI показывал, как узнать кто открыл файл даже только для просмотра. Где эта тема — не знаю. И что это за ирония — «содержательный ответ»?

Пользователь
Сообщений: 2684 Регистрация: 01.01.1970
29.10.2009 13:17:37

ну насчет корявости поиска тоже много обсуждалось, найти что то крайне трудно, надо сидеть и вспоминать фразу которая точно была в данном топике, иначе — никак.

Так что посылать в поиск не совсем корректно, тем паче если и сами найти на могли)

29.10.2009 13:33:25

Стасон, в своё время ZVI показывал, как узнать кто открыл файл даже только для просмотра. Где эта тема — не знаю. И что это за ирония — «содержательный ответ»?

Юрий, ирония моя достаточно добродушная. Не обижайтесь. А её природа в том, что, для просвещённого человека в како-либо области, имхо, проще сразу подсказать по существу вопроса, чем отправлять не солоно хлебавши без малейшего намёка. Поверьте — я не ленивый человек, но можно же мне помочь съэкономить массу времени.

29.10.2009 14:38:08

Можно ли средствами VBA узнать сетевое имя компьютера, с которого открыли «для записи» файл, который я открыл позже «только для чтения»?

Хотелось бы получить ответ гуру по существу вопроса. В какой области хелпа по Экселю мне хотя бы искать?

Пользователь
Сообщений: 2410 Регистрация: 01.01.1970
29.10.2009 15:10:15

.UserStatus именно с общей книгой работает.
А вот если книга открыта в монопольный доступ и ReadOnly — эксель на строку .UserStatus ругается.
Юрий, я тоже не смог найти. Дайте хотя бы текст запроса, который Вы вводили яндексу.

Bite my shiny metal ass!
Пользователь
Сообщений: 62 Регистрация: 01.01.1970
29.10.2009 15:18:13

А я пользуюсь во всех книгах следующим макросом. Реально не раз выручал, когда пользователь говорит «не я», а я ему показываю что всетаки он.
Отображает в листе «Log» кто, что, и когда сделал.

Sub LogFilling(ByVal Target As Range, ByVal SheetName As String)

Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 1).NumberFormat = «dd.mm.yyyy hh:mm:ss»
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 1).HorizontalAlignment = xlRight
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 1).Value = Date + Time
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 2).NumberFormat = «@»
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 2).HorizontalAlignment = xlRight
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 2).Value = SheetName & «: » & Target.Address
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 3).HorizontalAlignment = xlRight
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 3).Value = Application.UserName
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 4).HorizontalAlignment = xlRight
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 4).Value = _
Worksheets(«Log»).Cells(1, 12).Value
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 5).HorizontalAlignment = xlRight
Worksheets(«Log»).Cells(Worksheets(«Log»).Cells(1, 11).Value, 5).Value = Target.Value
Worksheets(«Log»).Cells(1, 11).Value = Worksheets(«Log»).Cells(1, 11).Value + 1

29.10.2009 15:27:04

Я уже и сам с прискорбием понял, что .UserStatus только с общими книгами работает. У меня случай с книгой не общей.
Дело в том, что строгой политики по именам пользователей на фирме нет, а вот имена компьютеров известны. Была идея, при открытии файла, в случае если он открылся «только для чтения» — определить комп с которого его смотрят. Дальше уже можно набрать местный номер и выгнать гада из книги.

to Prist: спасибо, мне все примеры в пользу. Когда-нибудь пригодится.

to angelrr: лог не подходит, ибо если книга свободна, то уже не важно кто там был. Но, всё равно спасибо, тоже возьму на заметку.

Пользователь
Сообщений: 1167 Регистрация: 01.01.1970
29.10.2009 15:36:17

я бы сделал так,
при открытии книги данные о пользователе пишеться в лог, и книга сохраняется, если книга не может сохраниться то ничего не делать.

НО человек может открыть файл без макросов, и тогда не узнаешь кто в нем сидит.

Пользователь
Сообщений: 2410 Регистрация: 01.01.1970
29.10.2009 15:55:35

Я в таких случаях ставлю пароль на редактирование. Простой пароль, его все знают, но когда открывается книга и вылезает окошко ввода пароля задумываешься а зачем открыл книгу — если просто посмотреть, то и пароль не вводишь, а нажимаешь только для чтения. В результате книга свободна для записи, меньше вероятность внесения случайных изменений.
Или другой вариант: Изменения в книгу вносятся только макросом, пароль записан в макросе, все открывают только для чтения.

Bite my shiny metal ass!
29.10.2009 16:47:51

Я так думаю, что на открытие книги поставлю макрос. Макрос будет в именованые константы записывать всё что мне нужно. А, при открытии, считывать данные буду из этих констант. Вот как-то так.

Пользователь
Сообщений: 2410 Регистрация: 01.01.1970
30.10.2009 10:03:57

Стасон, записать в имена и сразу сохранять? Тоже метод. Еще возможно в WinAPI поковыряться, какая-то должна возвращать эту информацию.

Bite my shiny metal ass!
24.04.2012 10:00:18
То есть, узнать имя пользователя, открывшего не общую книгу нельзя?
Страницы: 1
Читают тему

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.

ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *