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

Как выяснить, открыт ли кем-нибудь файл с общим доступом?

Aleksio

Дата: Вторник, 26.07.2016, 23:22 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 22


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

Есть файл с общим доступом. Файл находится на общем сетевом жёстком диске. С этим файлом постоянно работают много человек.
1. Необходимо выяснить, открыт ли у в настоящее время у кого-нибудь из сотрудников данный файл.
2. Желательно выяснить, у кого именно открыт.

В случае, если файл не с общим доступом, то всё просто — он выводит табличку, что файл открыт конкретным пользователем. А вот если включён общий доступ — то ничего не сообщает. Более того, файл спокойно поддаётся переименованию, а также перемещению в другую папку, и сообщение о том, что файл занят каким-то процессом — не выводится. Через журнал изменений можно лишь выяснить, кем и когда файл был открыт (если при этом пользователь сохранял файл) и кем и когда было сделано последнее изменение. При этом кем сейчас он используется — не ясно.

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

P.s. Доступа к администрированию сетевого ресурса (управление компьютером) нет.

Сообщение отредактировал AleksioВторник, 26.07.2016, 23:25

 

Ответить

Karataev

Дата: Среда, 27.07.2016, 10:03 |
Сообщение № 2

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

Вкладка «Рецензирование» — Доступ к книге — вкладка «Правка» — в области «Файл открыт следующими пользователями» список пользователей, которые открыли общий файл.
PS. В списке пользователей отображаются только те пользователи, у которых файл открыт в режиме чтения и записи. Если у пользователя ограничены права и он может открыть только в режиме чтения, то такой пользователь не отображается в этом списке.


Киви-кошелек: 9166309108

 

Ответить

Manyasha

Дата: Среда, 27.07.2016, 10:13 |
Сообщение № 3

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

вариант макросом:
[vba]

Код

Sub CheckUserStatus()
    Dim users, msg$, i%
    users = ThisWorkbook .UserStatus
    For i = 1 To UBound(users, 1)
        msg = msg & vbCrLf & users(i, 1)
        If users(i, 3) = 1 Then
            msg = msg & » — Exclusive»
        Else
            msg = msg & » — Shared»
        End If
    Next
    MsgBox msg
End Sub

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Aleksio

Дата: Среда, 27.07.2016, 22:39 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 22


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

Вкладка «Рецензирование» — Доступ к книге — вкладка «Правка» — в области «Файл открыт следующими пользователями» список пользователей, которые открыли общий файл.
PS. В списке пользователей отображаются только те пользователи, у которых файл открыт в режиме чтения и записи. Если у пользователя ограничены права и он может открыть только в режиме чтения, то такой пользователь не отображается в этом списке.

Я в курсе, про это я и говорил. Да, там написано, что «Файл открыт следующими пользователями», но на деле это не так. Файл уже давно закрыт и сохранён пользователем, а в списке он остаётся. Там просто фиксируется когда данный пользователь входил в последний раз.
И наоборот, пользователь в файл вошёл, редактирует, но ещё его не сохранял — в списке пользователя нет.

А за макрос спасибо, на днях испытаю чисто из интереса, но в данном моём случае вариант с макросом не подходит, ибо файл и так очень большой, периодически случаются конфликты с одновременным сохранением/входом + подвисает при вычислении. Макрос ещё больше его нагрузит. Да и остальным пользователям эта табличка являться не должна, только мне. Разве что как-то сослаться из другого файла с использованием макроса на необходимый файл… но как?

 

Ответить

Karataev

Дата: Четверг, 28.07.2016, 09:25 |
Сообщение № 5

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

Я в курсе, про это я и говорил.

В первом посте нет ни слова про область «Файл открыт следующими пользователями». Может Вы где-то в другом месте смотрите, а не там, где я написал в посте 2.

Да, там написано, что «Файл открыт следующими пользователями», но на деле это не так. Файл уже давно закрыт и сохранён пользователем, а в списке он остаётся. Там просто фиксируется когда данный пользователь входил в последний раз.
И наоборот, пользователь в файл вошёл, редактирует, но ещё его не сохранял — в списке пользователя нет.

У меня другое поведение общего доступа: пользователь открыл файл — пользователь появился в области «Файл открыт следующими пользователями». Пользователь закрыл файл — пользователь удалился из этой области. Почему-то у нас с Вами разное поведение с общим доступом. Я тестировал в «Excel 2016».


Киви-кошелек: 9166309108

Сообщение отредактировал KarataevЧетверг, 28.07.2016, 09:50

 

Ответить

Manyasha

Дата: Четверг, 28.07.2016, 10:27 |
Сообщение № 6

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Олег, у меня тоже иногда бывает такое, что

Файл уже давно закрыт и сохранён пользователем, а в списке он остаётся

А иногда еще пользователи и дублируются, т.е. в списке пользователей один человек записан 2 и более раз. Не знаю с чем это может быть связано %)

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

Мне снимать общий доступ требуется очень редко, в основном тогда, когда я хочу обновить/добавить какой-нибудь макрос. На этот случай, я веду логи: записываю в текстовый файлик кто и когда открыл/сохранил/закрыл файл.

Aleksio, макрос вернет такой же результат, как и при просмотре списка пользователей вручную.


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Karataev

Дата: Четверг, 28.07.2016, 11:28 |
Сообщение № 7

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

Manyasha, но до конца все равно не понятна ситуация, т.к. в посте 1 автор не упоминает про «Файл открыт следующими пользователями», а пишет про «журнал изменений». Я пока не смотрел, что это за журнал.


Киви-кошелек: 9166309108

 

Ответить

Aleksio

Дата: Среда, 03.08.2016, 23:53 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 22


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

Испытал макрос. Работает. Показывает, что такой-то пользователь работает в файле. А вот в «Файл открыт следующими пользователями» при этом пользователь не отображается. Excel 2007.
Правда испытал лишь с несколькими пользователями, но пока работает. Спасибо.

А возможно ли создать макрос в новом файле, чтобы он ссылался на интересуемый файл с общим доступом, и проверял, кто сейчас находится в том файле? (чтобы макрос не встраивать в файл с общим доступом)

 

Ответить

Karataev

Дата: Четверг, 04.08.2016, 09:01 |
Сообщение № 9

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

Насколько я понимаю, свойство «UserStatus» — это «Файл открыт следующими пользователями». Даже информация возвращается та же, что и в «Файл открыт следующими пользователями». Но видимо в данном случае VBA и Excel работают по-разному.


Киви-кошелек: 9166309108

 

Ответить

Manyasha

Дата: Четверг, 04.08.2016, 10:27 |
Сообщение № 10

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

макрос в новом файле, чтобы он ссылался на интересуемый файл с общим доступом

в макросе замените ThisWorkbook на ActiveWorkbook, макрос будет проверять активную книгу.


ЯД: 410013299366744 WM: R193491431804

 

Ответить

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


  • Вопрос задан

    более трёх лет назад

  • 10943 просмотра

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

Пригласить эксперта

На сервере с вашей шарой запускаешь compmgmt.msc > Общие папки > Открытые файлы и смотришь кто работает с файлом. Также можно воспользоваться консольной утилиты Openfiles


  • Показать ещё
    Загружается…

15 апр. 2023, в 23:37

1000 руб./в час

15 апр. 2023, в 23:24

25000 руб./за проект

15 апр. 2023, в 21:40

2000 руб./за проект

Минуточку внимания

Содержание

  1. Как узнать у кого открыт файл excel в сети
  2. Как узнать у кого открыт файл excel в сети
  3. Как узнать у кого открыт файл excel в сети
  4. Отслеживание входа пользователей в книгу Excel
  5. Этап 1. Создаем «Лог»
  6. Этап 2. Макросы фиксации входа-выхода
  7. Этап 3. Улучшаем надежность
  8. Как посмотреть кто использует файл excel

Как узнать у кого открыт файл excel в сети

Как узнать у кого открыт файл excel в сети

Вы считаете это удобным, если да, то при каких условиях?
Предположим обрабатывает программа n-файлов (много) в разных папках, 5 из которых были открыты. Значит после обработки останется 5 txt файлов. Что с этим делать, учитывая то, что надо файлики дальше обрабатывать?

Gioch
Попробуйте — Tools — Share Workbook, это даёт возможность другим юзерам совместо работать.
Но когд одновременно двое или более юзеров будут редактировать одну и тоже ячейку, возникнут ошибки.

Общий доступ не считаю приемлимым, так как сильно тормозит файл.

Вы считаете это удобным, если да, то при каких условиях?
Предположим обрабатывает программа n-файлов (много) в разных папках, 5 из которых были открыты. Значит после обработки останется 5 txt файлов. Что с этим делать, учитывая то, что надо файлики дальше обрабатывать?

На неординарный ник, фантазии хватило, а вот на удаление txt после использования нет? И необязательно 5 файлов, достаточно одного.

Chelovek Tapok
Вот когда пытаешься открыть файл ручками, открытый кем-то еще, то появляется сообщение «Редактирование . запрещено пользователем XXX . » , отсюда вывод! можно ведь программно как-то узнать кем открыт файл. Искал в API функциях, не нашел.

Вывод неправильный. Узнать что файл занят — это можно, а вот кем занят — это невозможно.
Если найдешь способ, дай знать, я не нашел, хотя искал долго.
Если ли какое-то граничное количество подключений пользователей
Проверка, откыт лифайл.

Что такое общий доступ мне известно, но работать таким образом не удобно (причина была указана ранее). Проще всем пользователям дать доступ только на чтение и, определенным дать возможность править

vkodor
На неординарный ник, фантазии хватило, а вот на удаление txt после использования нет? И необязательно 5 файлов, достаточно одного.

Вы меня не правильно поняли. Чтобы файл txt удалить, данные из него (прежде) надо перенести в файлы .xls, которые открыты будут пользователями еще неизвестно сколько. А работа такова, что нельзя идти дальше, пока данные не окажутся в файлах xls.

vkodor
Вывод неправильный. Узнать что файл занят — это можно, а вот кем занят — это невозможно.

Вы опять меня не понимаете(может и моя вина, что не подробно объясняю).

Есть файл 1.xls на общем сетевом ресурсе, который открыл пользователь Иванов.
Я пытаюсь у себя на компьютере открыть этот файл ручками и выскакивает сообщение
«Файл уже используется
Редактирование 1.xls запрещено пользователем Иванов.
Откройте только для чтения или . «
Как мне видится, то есть некая библиотека, благодаря которой можно получить данные об Иванове программно (как никак сообщение выскочило с этой информацией).

Как узнать у кого открыт файл excel в сети

Есть файл с общим доступом. Файл находится на общем сетевом жёстком диске. С этим файлом постоянно работают много человек.
1. Необходимо выяснить, открыт ли у в настоящее время у кого-нибудь из сотрудников данный файл.
2. Желательно выяснить, у кого именно открыт.

В случае, если файл не с общим доступом, то всё просто — он выводит табличку, что файл открыт конкретным пользователем. А вот если включён общий доступ — то ничего не сообщает. Более того, файл спокойно поддаётся переименованию, а также перемещению в другую папку, и сообщение о том, что файл занят каким-то процессом — не выводится. Через журнал изменений можно лишь выяснить, кем и когда файл был открыт (если при этом пользователь сохранял файл) и кем и когда было сделано последнее изменение. При этом кем сейчас он используется — не ясно.

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

P.s. Доступа к администрированию сетевого ресурса (управление компьютером) нет.

Есть файл с общим доступом. Файл находится на общем сетевом жёстком диске. С этим файлом постоянно работают много человек.
1. Необходимо выяснить, открыт ли у в настоящее время у кого-нибудь из сотрудников данный файл.
2. Желательно выяснить, у кого именно открыт.

В случае, если файл не с общим доступом, то всё просто — он выводит табличку, что файл открыт конкретным пользователем. А вот если включён общий доступ — то ничего не сообщает. Более того, файл спокойно поддаётся переименованию, а также перемещению в другую папку, и сообщение о том, что файл занят каким-то процессом — не выводится. Через журнал изменений можно лишь выяснить, кем и когда файл был открыт (если при этом пользователь сохранял файл) и кем и когда было сделано последнее изменение. При этом кем сейчас он используется — не ясно.

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

P.s. Доступа к администрированию сетевого ресурса (управление компьютером) нет. Aleksio

Сообщение Есть файл с общим доступом. Файл находится на общем сетевом жёстком диске. С этим файлом постоянно работают много человек.
1. Необходимо выяснить, открыт ли у в настоящее время у кого-нибудь из сотрудников данный файл.
2. Желательно выяснить, у кого именно открыт.

В случае, если файл не с общим доступом, то всё просто — он выводит табличку, что файл открыт конкретным пользователем. А вот если включён общий доступ — то ничего не сообщает. Более того, файл спокойно поддаётся переименованию, а также перемещению в другую папку, и сообщение о том, что файл занят каким-то процессом — не выводится. Через журнал изменений можно лишь выяснить, кем и когда файл был открыт (если при этом пользователь сохранял файл) и кем и когда было сделано последнее изменение. При этом кем сейчас он используется — не ясно.

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

Источник

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

Представьте себе книгу Excel с очень важными для вас данными, сохраненную на общем сетевом диске компании, куда имеет доступ куча народу. Одним совсем не прекрасным утром вы открываете этот файл и обнаруживаете, что внутри кто-то поиграл в аль-каиду: формулы поломаны, данные стерты, дизайн нарушен. Поскольку вы опытный пользователь, то у вас, конечно же, была резервная копия этого важного документа (была же, правда?) и данные вы восстановите, но чисто из спортивного интереса хотелось бы все же узнать — КТО ЭТО СДЕЛАЛ?!

Давайте попробуем решить эту задачу. Итак, нам нужно:

  • фиксировать на отдельном (скрытом) листе имя пользователя, открывшего файл;
  • фиксировать там же дату-время открытия и закрытия файла;
  • по возможности усложнить взлом или обход такой защиты.

Этап 1. Создаем «Лог»

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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

Есть файл с общим доступом. Файл находится на общем сетевом жёстком диске. С этим файлом постоянно работают много человек.
1. Необходимо выяснить, открыт ли у в настоящее время у кого-нибудь из сотрудников данный файл.
2. Желательно выяснить, у кого именно открыт.

В случае, если файл не с общим доступом, то всё просто — он выводит табличку, что файл открыт конкретным пользователем. А вот если включён общий доступ — то ничего не сообщает. Более того, файл спокойно поддаётся переименованию, а также перемещению в другую папку, и сообщение о том, что файл занят каким-то процессом — не выводится. Через журнал изменений можно лишь выяснить, кем и когда файл был открыт (если при этом пользователь сохранял файл) и кем и когда было сделано последнее изменение. При этом кем сейчас он используется — не ясно.

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

P.s. Доступа к администрированию сетевого ресурса (управление компьютером) нет.

Есть файл с общим доступом. Файл находится на общем сетевом жёстком диске. С этим файлом постоянно работают много человек.
1. Необходимо выяснить, открыт ли у в настоящее время у кого-нибудь из сотрудников данный файл.
2. Желательно выяснить, у кого именно открыт.

В случае, если файл не с общим доступом, то всё просто — он выводит табличку, что файл открыт конкретным пользователем. А вот если включён общий доступ — то ничего не сообщает. Более того, файл спокойно поддаётся переименованию, а также перемещению в другую папку, и сообщение о том, что файл занят каким-то процессом — не выводится. Через журнал изменений можно лишь выяснить, кем и когда файл был открыт (если при этом пользователь сохранял файл) и кем и когда было сделано последнее изменение. При этом кем сейчас он используется — не ясно.

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

P.s. Доступа к администрированию сетевого ресурса (управление компьютером) нет. Aleksio

Сообщение Есть файл с общим доступом. Файл находится на общем сетевом жёстком диске. С этим файлом постоянно работают много человек.
1. Необходимо выяснить, открыт ли у в настоящее время у кого-нибудь из сотрудников данный файл.
2. Желательно выяснить, у кого именно открыт.

В случае, если файл не с общим доступом, то всё просто — он выводит табличку, что файл открыт конкретным пользователем. А вот если включён общий доступ — то ничего не сообщает. Более того, файл спокойно поддаётся переименованию, а также перемещению в другую папку, и сообщение о том, что файл занят каким-то процессом — не выводится. Через журнал изменений можно лишь выяснить, кем и когда файл был открыт (если при этом пользователь сохранял файл) и кем и когда было сделано последнее изменение. При этом кем сейчас он используется — не ясно.

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

Источник

Представьте себе книгу Excel с очень важными для вас данными, сохраненную на общем сетевом диске компании, куда имеет доступ куча народу. Одним совсем не прекрасным утром вы открываете этот файл и обнаруживаете, что внутри кто-то поиграл в аль-каиду: формулы поломаны, данные стерты, дизайн нарушен. Поскольку вы опытный пользователь, то у вас, конечно же, была резервная копия этого важного документа (была же, правда?) и данные вы восстановите, но чисто из спортивного интереса хотелось бы все же узнать — КТО ЭТО СДЕЛАЛ?!

Давайте попробуем решить эту задачу. Итак, нам нужно:

  • фиксировать на отдельном (скрытом) листе имя пользователя, открывшего файл;
  • фиксировать там же дату-время открытия и закрытия файла;
  • по возможности усложнить взлом или обход такой защиты.

Поехали…

Этап 1. Создаем «Лог»

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

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

Есть файл с общим доступом. Файл находится на общем сетевом жёстком диске. С этим файлом постоянно работают много человек.
1. Необходимо выяснить, открыт ли у в настоящее время у кого-нибудь из сотрудников данный файл.
2. Желательно выяснить, у кого именно открыт.

В случае, если файл не с общим доступом, то всё просто — он выводит табличку, что файл открыт конкретным пользователем. А вот если включён общий доступ — то ничего не сообщает. Более того, файл спокойно поддаётся переименованию, а также перемещению в другую папку, и сообщение о том, что файл занят каким-то процессом — не выводится. Через журнал изменений можно лишь выяснить, кем и когда файл был открыт (если при этом пользователь сохранял файл) и кем и когда было сделано последнее изменение. При этом кем сейчас он используется — не ясно.

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

P.s. Доступа к администрированию сетевого ресурса (управление компьютером) нет.

Есть файл с общим доступом. Файл находится на общем сетевом жёстком диске. С этим файлом постоянно работают много человек.
1. Необходимо выяснить, открыт ли у в настоящее время у кого-нибудь из сотрудников данный файл.
2. Желательно выяснить, у кого именно открыт.

В случае, если файл не с общим доступом, то всё просто — он выводит табличку, что файл открыт конкретным пользователем. А вот если включён общий доступ — то ничего не сообщает. Более того, файл спокойно поддаётся переименованию, а также перемещению в другую папку, и сообщение о том, что файл занят каким-то процессом — не выводится. Через журнал изменений можно лишь выяснить, кем и когда файл был открыт (если при этом пользователь сохранял файл) и кем и когда было сделано последнее изменение. При этом кем сейчас он используется — не ясно.

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

P.s. Доступа к администрированию сетевого ресурса (управление компьютером) нет. Aleksio

Сообщение Есть файл с общим доступом. Файл находится на общем сетевом жёстком диске. С этим файлом постоянно работают много человек.
1. Необходимо выяснить, открыт ли у в настоящее время у кого-нибудь из сотрудников данный файл.
2. Желательно выяснить, у кого именно открыт.

В случае, если файл не с общим доступом, то всё просто — он выводит табличку, что файл открыт конкретным пользователем. А вот если включён общий доступ — то ничего не сообщает. Более того, файл спокойно поддаётся переименованию, а также перемещению в другую папку, и сообщение о том, что файл занят каким-то процессом — не выводится. Через журнал изменений можно лишь выяснить, кем и когда файл был открыт (если при этом пользователь сохранял файл) и кем и когда было сделано последнее изменение. При этом кем сейчас он используется — не ясно.

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

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

Представьте себе книгу Excel с очень важными для вас данными, сохраненную на общем сетевом диске компании, куда имеет доступ куча народу. Одним совсем не прекрасным утром вы открываете этот файл и обнаруживаете, что внутри кто-то поиграл в аль-каиду: формулы поломаны, данные стерты, дизайн нарушен. Поскольку вы опытный пользователь, то у вас, конечно же, была резервная копия этого важного документа (была же, правда?) и данные вы восстановите, но чисто из спортивного интереса хотелось бы все же узнать — КТО ЭТО СДЕЛАЛ?!

Давайте попробуем решить эту задачу. Итак, нам нужно:

  • фиксировать на отдельном (скрытом) листе имя пользователя, открывшего файл;
  • фиксировать там же дату-время открытия и закрытия файла;
  • по возможности усложнить взлом или обход такой защиты.

Этап 1. Создаем «Лог»

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

blackbox1.png

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

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

blackbox2.png

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

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

blackbox3.png

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

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

blackbox4.png

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

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

blackbox5.png

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

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

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

blackbox7.png

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

blackbox8.png

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

Узнать имя пользователя, открывшего файл (в локальной сети)

Нужно узнать перед заполнением файла Excel или Word данными из Access (если он уже открыт) кто из пользователей открыл его (чтобы «попросить» закрыть). Файл лежит на сервере, все пользователи могут в него что-то вносить. Windows 7, Офис 2010 и 2013
есть такой код. Как его соединить с моим?

Можно ли и как узнать имя пользователя открывшего файл
Можно ли и как узнать имя пользователя открывшего файл? Собственно сабж.

Как узнать имя или ip адрес атакующего по локальной сети?
Представим, что в помещении есть 3 ПК и один из них решил пошутить и прописать shutdown, но.

Узнать имя пользователя на ПК в сети по списку
Здравствуйте, в PS не силен,но есть необходимость вывести имена пользователей, которые залогинены.

Узнать имя пользователя у кого открыт файл
Доброго времени суток! Есть ли возможность по средствам vb.net узнать у какого пользователя открыт.

прямого пути пока не знаю.

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

проблемы пока две:
1) у пользователя могут быть отключены макросы;
2) у пользователя может зависнуть комп или вырубиться электричество — и макрос на закрытие не отработает.

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

Belkin
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 63
Зарегистрирован: 02.11.2007 (Пт) 18:02
Откуда: Рязань

Кто открыл сетевой xls файл для записи.

Видел аналогичный вопрос, но на него так и не ответили, поэтому хочу попытать еще раз счастье ;)

Подскажите как решить вопрос:
Есть сетевой xls файл, если кто-то его открывает первым на запись, то при открытии ручками этого файла появляется окно с сообщением, что данный файл открыт пользователем «XXX», открыть файл только для чтения?
1. Как можно программно до открытия этого файла узнать что он уже занят другим пользователем? (вопрос минимума)
2. Как узнать кто держит этот файл? (вопрос максимума)

Вопросы актуальны для xls файла, но если есть универсальное решение, скажем еще и для текстовых, буду очень признателен.

Что смог накопать с сделать сам:
Только функцию для проверки занят ли файл. перед вызовом функции в параметр передавать проверенный (существующий) путь к файлу

Код: Выделить всё
Function file_read_only(strPath As String) As Boolean
On Error GoTo err

Dim fso As New FileSystemObject

'If fso.FileExists(strPath) = True Then 'файл существует
    Call fso.MoveFile(strPath, strPath) ' Пробуем переименовать в себя, если ошибка, то файл уже открыт кем-то с доступом на запись
    file_read_only = False 'Файл доступен для чтения
'End If
Exit Function

err:
    file_read_only = True ' Файл кем-то открыт

End Function

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

Андрей.


iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Кто открыл сетевой xls файл для записи.

Сообщение iGrok » 10.02.2011 (Чт) 0:03

Универсального способа, насколько я знаю, нет.
В случае с документами офиса, рядом с документом создаётся «блокирующий» файлик, в котором указано имя открывшего юзера. Только это не имя машины, а имя, которое было указано при установке офиса. Поэтому оно толком ничем не поможет.

Точно это можно сделать на novell’овской сети, т.к. она предоставляет такой функционал (отслеживание блокировок, рассылка сообщений, принудительное отключение юзера при наличии соответствующих прав, и т.п.). Возможно, есть какие-то подобные механизмы в майкрософтовской сетке, но этого я не знаю.

label:

cli

jmp label


Belkin
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 63
Зарегистрирован: 02.11.2007 (Пт) 18:02
Откуда: Рязань

Re: Кто открыл сетевой xls файл для записи.

Сообщение Belkin » 10.02.2011 (Чт) 9:30

iGrok
Такой файлик создается для .doc файлов, для .xls я что-то не нахожу.
Если такое сообщение (о пользователе) выводит Excel, значит он где-то читает эту информацию, может через какие-то API функции.
Значит как-то можно вытащить имя пользователя, вопрос ТОЛЬКО КАК? :)
Наблюдения:
Если другой пользователь открыл .doc файл, то создается файлик с тем же именем, только в начале добавляется ~$
При этом если смотреть, то у оригинального файла не изменяется «Date Modifited», а у нового файлика эта дата становится в дату открытия.
С .xls файлами по другому: Нового файла не создается, а «Date Modifited» у самого файа изменяется в дату открытия.
Так может Excel пишит информацию о пользователе открывшем файл в сам .xls вайл? Если да, то как ее оттуда прочитать?

Андрей.


Gloom
Бывалый
Бывалый
Аватара пользователя

 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Re: Кто открыл сетевой xls файл для записи.

Сообщение Gloom » 10.02.2011 (Чт) 14:28

Может имеет смысл разрешить общий доступ к книге?
Тогда можно будет воспользоваться свойством UserStatus
Вообще, имя пользователя excel хранит в самом файле и его даже можно оттуда вытащить.
Но, как уже было сказано, это не имя компьютера, а значение из свойства Application.UserName и пользователь может написать туда всё, что ему заблагорассудится. Т.е. для цели отправки сообщения информация бесполезная.


Belkin
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 63
Зарегистрирован: 02.11.2007 (Пт) 18:02
Откуда: Рязань

Re: Кто открыл сетевой xls файл для записи.

Сообщение Belkin » 10.02.2011 (Чт) 15:47

Gloom
Нет, про общий доступ речи не идет.
А на счет имени, это действительно имя которое задано при установки офиса.
НО! В нашей большой организации это делается так, что это имя соответствует логину пользователя.
Поэтому, всеже я хотел бы извлечь это имя, а потом решать что с ним делать.
ПОДСКАЖИТЕ как вытащить это имя?

Андрей.


Gloom
Бывалый
Бывалый
Аватара пользователя

 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Re: Кто открыл сетевой xls файл для записи.

Сообщение Gloom » 10.02.2011 (Чт) 17:10

Ну, в структуре xls файла (BIFF — Binary Interchange File Format) есть раздел WriteAccess:
The WriteAccess record specifies the name of the user who last created, opened, or modified the
file.

Т.е. нужно открыть файл, найти этот самый раздел и прочитать его.
Вот здесь (функция LastUser), например, это делается, но достаточно примитивно — будет работать, если в имени пользователя используется только английские буквы.
Также этот метод не сработает на файлах с парольной защитой, т.к. в этом случае раздел WriteAccess шифруется.


Belkin
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 63
Зарегистрирован: 02.11.2007 (Пт) 18:02
Откуда: Рязань

Re: Кто открыл сетевой xls файл для записи.

Сообщение Belkin » 10.02.2011 (Чт) 20:54

Gloom
ОГРОМНОЕ спасибо!
Судя по всему, это то что и хотел.

Хорошо бы было если такую информацию можно было бы получать для любого файла (например .txt)

Еще раз СПАСИБО!

Андрей.


iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Кто открыл сетевой xls файл для записи.

Сообщение iGrok » 10.02.2011 (Чт) 22:21

Belkin писал(а):Хорошо бы было если такую информацию можно было бы получать для любого файла (например .txt)

Ну, я в первом же посту ответил насчёт этого.

Только если такой функционал поддерживает сам файл-сервер.
Если шара поднята на новелле или на самбе — они это умеют. Правда, не «стандартными» функциями, но в целом реализацию сделать можно.
Про виндовые файл-серверы — не знаю. Скорей всего, нет.

UPD:
А может и есть.
Копать в этом направлении:

http://www.kuban.ru/forum_new/forum15/arhiv/8411.html

UPD2:
Да и вот тут вроде что-то давали:

viewtopic.php?f=2&t=15322

label:

cli

jmp label


Belkin
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 63
Зарегистрирован: 02.11.2007 (Пт) 18:02
Откуда: Рязань

Re: Кто открыл сетевой xls файл для записи.

Сообщение Belkin » 11.02.2011 (Пт) 9:31

iGrok
Спасибо, я тебя еще в первом посте услышал.
Впринципе, я получил, что хотел. А остальное — размышление в слух.

Андрей.


Egor Olegovich
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 06.03.2013 (Ср) 12:22

Re: Кто открыл сетевой xls файл для записи.

Сообщение Egor Olegovich » 06.03.2013 (Ср) 12:28

В программе Excel в меню Сервис выбираем доступ к книге.Откроется окно и смотрим кто же у нас открыл этот файл.Подсказал мой коллега мне!!!Пользуйтесь на здоровье. :D



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Актуально только для Клиента Google Диска

" "

Советы

Чтобы не запутаться в версиях файла Microsoft Word, Excel или PowerPoint, над которым работают несколько человек, в Google Диск для компьютеров вы можете отслеживать, кто редактирует файл в настоящий момент.

Примечания

  • Совместное редактирование в реальном времени включено в Диск для компьютеров по умолчанию. Если кто-то из соавторов отключит эту функцию, вы не увидите, что этот пользователь работает с файлом.
  • Чтобы использовать функцию совместного редактирования в реальном времени на компьютере Apple Mac, необходимо изменить системные разрешения согласно инструкциям ниже.
  • Совместное редактирование в реальном времени поддерживается в файлах Office 2010 и более поздних версий.

Как узнать, кто редактирует файл Microsoft Office" "

  1. В приложении «Диск для компьютеров» откройте файл Office, к которому предоставлен доступ, с помощью Word, Excel или PowerPoint.

    В правом нижнем углу страницы появится текущий статус.

  2. В зависимости от статуса будет показан один из следующих вариантов действий:
    • Можно редактировать. Никто не редактирует файл, поэтому вы можете вносить изменения.
    • Подождите, кто-то уже редактирует документ. Этот статус означает, что сейчас с файлом работает другой пользователь.
      • Чтобы получить уведомление о том, что пользователь завершил работу, установите флажок Сообщить мне, когда с файлом можно будет работать.
      • Чтобы посмотреть подробные сведения о том, кто редактирует или просматривает файл, нажмите на пользователя в списке.
    • Создана новая версия. Этот статус означает, что кто-то создал новую версию документа. Чтобы увидеть новую версию, нажмите Обновить.

Как объединить версии" "

Если кто-то сохранит новую версию файла, который вы редактируете, вы получите уведомление.

Вы сможете сохранить свою версию как копию или вручную объединить вашу и последнюю сохраненную версию файла. Получив уведомление:

  1. Нажмите Сравнить версии.
  2. Скопируйте изменения из своей версии (слева) в последнюю версию (справа).
  3. Закончив, нажмите Сохранить для последней версии файла.

Несохраненная версия (слева) будет удалена.

Как изменить системные разрешения на компьютере Mac" "

Как отключить функцию совместного редактирования в реальном времени" "

Google, Google Workspace, а также другие связанные знаки и логотипы являются товарными знаками компании Google LLC. Все другие названия компаний и продуктов являются товарными знаками соответствующих компаний.

Эта информация оказалась полезной?

Как можно улучшить эту статью?

как определить компьютер, с которого открыли файл?

Автор Стасон, 30.10.2009, 15:45

« назад — далее »

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


Вот так попробуйте:

Private Declare Function GetComputerName Lib «kernel32» Alias «GetComputerNameA» (ByVal lpBuffer As String, nSize As Long) As Long

Sub test()
Dim scomp As String
scomp = Space(255)
h = GetComputerName(scomp, 255)
MsgBox Trim(scomp)
End Sub


Спасибо. Попробовал. Однако, я получаю своё имя. Мне же надо узнать кто из сети открыл файл.
Или я не так это использую?


Эта процедура выдает имя того, кто в настоящий момент открыл файл. Если Вы открыли, то Ваше имя и выдаст. Если кто другой — соответственно — его имя. Как Вы организуете использование этой информации — тут простор для фантазии. Можно, например, поставить процедуру в автозапуск по событию открытия файла и вместо мессаджбокса записывать ее в определенную ячейку, или в пользовательское свойство файла, или сообщать кому следует :), например по почте.


Путей к вершине — множество. Этот один из многих!


Цитата: Алексей Шмуйлович от 02.11.2009, 20:42
Эта процедура выдает имя того, кто в настоящий момент открыл файл. 

Дык, этот файл в настоящее время открыли двое. «Тот, кто открыл первым»  и я.
Эта процедура определяет только имя копьютера, с которого я открыл файл? А определить имя компьютера «того, кто открыл первым» как можно с моего компьютера?
Вариант записи имя компа в именованную константу в книге при первом (по очереди) открытии — это я уже взял на вооружение. Но для этого надо в каждую книгу соответствующий макрос записывать. А хотелось более гибкого и универсального решения.  :'(


Имя пользователя, который открыл файл для работы, Excel же определяет и пишет в мессаге, что-то типа «Файл открыт пользователем User». Неужели это нельзя реализовать силами VBA? :-((((


#7




03.11.2009, 14:36

Последнее редактирование: 03.11.2009, 14:38 от Алексей Шмуйлович

Так, сразу много вопросов.
GWolf, на счет почты я пошутил. Задача в принципе решаемая, но я сам никогда целью не задавался и не решал. И, кажется, была подобная тема про электропочту. Если актуально, давайте вынесем в отдельный топик.
Стасон, я предлагаю схему фиксации где-то на внешнем носителе (на экране, в файле, в базе данных и т.п.) того события что файл открыли. А Вы, видимо хотите понять, кем он открыт в данный момент, т.е. на момент запроса. Как это сделать программно, пока мыслей нет. Руками можно посмотреть в управлении системой с того компьютера, на котором физически хранится файл. Но Вы подумайте хорошо, может для Вашей задачи будет достаточно информации об очереди пользователей, открывавших файл?
Второй вопрос про VBA — не понял. А я же и пишу Вам код на VBA, просто обращаюсь в API. Вы же просили не пользователя, а имя компьютера. Если пользователя, то можно попытаться обратиться к данным подписи пользователя Office, той, что используется при рецензировании, — где-то в настройках программы они есть, соответствнно должен быть и программный доступ к этим данным.


Задумка была такая:
на фирме нет строгой политики по именам пользователя, но зато имена компьютеров уникальны. Поэтому когда открываешь какой-либо файл, а там сидит какой-нибудь «User», то узнать имя компа, с которого этот файл в текущий момент открыт. Дальше уже можно банальным телефонным звонком выгнать пользователя из файла. Вот…


Ну, тогда мой вариант Вам подойдет.
Каждый, кто открывает файл, автоматически запускает событие открытия книги. Выводите инфу об имени компьютера в какой-нибудь текстовый файл в сети или базу данных и у Вас всегда будет инфа кто и когда открыл. При желании также можно записывать и инфу о закрытиии файла по соответствующему событию.



Цитата: Стасон от 03.11.2009, 13:53
Имя пользователя, который открыл файл для работы, Excel же определяет и пишет в мессаге, что-то типа «Файл открыт пользователем User». Неужели это нельзя реализовать силами VBA? :-((((

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


Цитата: Алексей Шмуйлович от 03.11.2009, 14:36

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

Думаю, что актуально, буду признателен, если все же сможем «дожать» до рабочего кода.

Путей к вершине — множество. Этот один из многих!


Если отправить почту нужно полностью автоматически, то нужны какие-нибудь нестандартные библиотеки. У меня на работе что-то подобное прораммист делал из SQL Servera. При поступлении новых записей в базу срабатывает триггер и мне отправляется письмо. Надо спросить, как он это сделал.
А если достаточно сформировать письмо в Outlook, которое потом человек своей рукой отправит адресату, то это просто. Outlook через OLE вызываем и вперед. Тоже поискать нужно, у меня где-то было.
Какой вариант смотрим?


Цитата: Алексей Шмуйлович от 06.11.2009, 19:05
Если отправить почту нужно полностью автоматически, то нужны какие-нибудь нестандартные библиотеки. У меня на работе что-то подобное прораммист делал из SQL Servera. При поступлении новых записей в базу срабатывает триггер и мне отправляется письмо. Надо спросить, как он это сделал.
А если достаточно сформировать письмо в Outlook, которое потом человек своей рукой отправит адресату, то это просто. Outlook через OLE вызываем и вперед. Тоже поискать нужно, у меня где-то было.
Какой вариант смотрим?

Не сочтите за наглость, но здается, что тема интересна не только мне, а посему — оба варианта. Хто его знает, как ползовательскопрограммная тропка повернется  ;) . Спасибо.

Путей к вершине — множество. Этот один из многих!


Ну ладно.
Вариант с отправкой через Outlook.

Public Sub sendmail()
    Dim olApp As Outlook.Application
    Dim objMail As Outlook.MailItem
    Set olApp = Outlook.Application
    ‘Create e-mail item
    Set objMail = olApp.CreateItem(olMailItem)

    With objMail
       ‘Set body format to HTML
       .To = «example@mail.ru»
       .BodyFormat = olFormatPlain
       .body = «Helo, World»
       .Send
    End With
End Sub

Можно использовать не .send, а .display, тогда подготовленное письмо будет ждать отправки вручную.

Второй вариант, независимый от Outlook скоро не обещаю — нужно будет пообщаться с программистом, а на работе сейчас дел невпроворот :(


Цитата: Алексей Шмуйлович от 06.11.2009, 22:55
Ну ладно.
Вариант с отправкой через Outlook.

Public Sub sendmail()
    Dim olApp As Outlook.Application
    Dim objMail As Outlook.MailItem
    Set olApp = Outlook.Application
    ‘Create e-mail item
    Set objMail = olApp.CreateItem(olMailItem)

    With objMail
       ‘Set body format to HTML
       .To = «example@mail.ru»
       .BodyFormat = olFormatPlain
       .body = «Helo, World»
       .Send
    End With
End Sub

Можно использовать не .send, а .display, тогда подготовленное письмо будет ждать отправки вручную.

Второй вариант, независимый от Outlook скоро не обещаю — нужно будет пообщаться с программистом, а на работе сейчас дел невпроворот :(

здорово, спасиба! Готов ждать …

Путей к вершине — множество. Этот один из многих!


Ну, сильно не радуйтесь. Для того, чтобы такой вариант работал, на компьютере должен быть Outlook с настроенной учетной записью для отправки почты и у него должны быль соответствующие настройки безопасности. То есть, если Вы намерены использовать это с разными компьютерами в сети, то не факт, что это везде сработает.


Путей к вершине — множество. Этот один из многих!


Боюсь, что и он будет страдать те ми же недостатками. Внешнюю библиотеку, чтобы она работала, нужно регистрировать на рабочей станции, где она будет выполняться.


Цитата: Алексей Шмуйлович от 07.11.2009, 00:45
Боюсь, что и он будет страдать те ми же недостатками. Внешнюю библиотеку, чтобы она работала, нужно регистрировать на рабочей станции, где она будет выполняться.

— это наименьшее зло …

Путей к вершине — множество. Этот один из многих!


Алексей Шмуйлович
А подскажите — как записать дату открытия!!!???
Сорри!!! Протупил!!! Сам разобрался!!!


Вопрос немного в другом!!! А возможно ли  узнать ЧТО поменял пользователь!!!


Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


GWolf, Алексей Шмуйлович,

Проще всего для отправки писем через SMTP в скриптах и макросах использовать CDO — Collaboration Data Objects. Это стандартные библиотеки входящие в любую винду с 2000-й. Вот здесь http://www.paulsadowski.com/WSH/cdo.htm есть несколько подробно описанных примеров практически на все случаи жизни.

А Outlook , кстати, с настройками по умолчанию при использовании метода Send будет показывать пользователю сообщение (модальное!!), о том что какая-то программа пытается письмо отправить и разрешить её или нет и на какое время. (Это сделали типа для защиты от вирусописателей. В 2007-м отключается в настройках безопасности, а в 2003-м, единственный известный мне метод, отключается с геморроем и только при работе с Exchange)


Понравилась статья? Поделить с друзьями:
  • Как посмотреть номер листа в excel
  • Как посмотреть кто редактировал файл excel
  • Как посмотреть несохраненный документ word
  • Как посмотреть кто работает в файле excel
  • Как посмотреть несохраненный документ excel