Vba excel определить кто открывал файл

  • Remove From My Forums
  • Вопрос

  • в VBScript пытаюсь создать подключение к excel файлу. но эта книга лежит на сервере, иногда эта книга бывает занята другим пользователем. как
    я могу получить имя пользователя  кто занял данную таблицу? уведомление во вложении. Имя пользователя как зарегистрирован в office

    я могу читать данные о пользователях через aplication.userstatus.  но для этого она должна быть открыта для редактирования нескольким пользователям.
    Как можно узнать кем занята книга для редактирования 

 

angelrr

Пользователь

Сообщений: 62
Регистрация: 01.01.1970

А я пользуюсь во всех книгах следующим макросом. Реально не раз выручал, когда пользователь говорит «не я», а я ему показываю что всетаки он.  
Отображает в листе «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  

             End Sub

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

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

Автор Стасон, 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)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
Option Compare Database
Option Explicit
 
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function LookupAccountName Lib "advapi32.dll" Alias "LookupAccountNameA" (lpSystemName As String, ByVal lpAccountName As String, sid As Any, cbSid As Long, ByVal ReferencedDomainName As String, cbReferencedDomainName As Long, peUse As Long) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Public CompName As String 'объявляем переменную доступную для всего проекта
 
Dim Workbooks As Object
Dim xlWbkEx As Object
Dim xlAppEx As Object
 
Public Rowss1 As Variant
Public Rowss2 As Integer
 
'Const MyFile = "P:Судебные делаСУДЕБНЫЕ ДЕЛА 2015 ОПОСД.xls"
Const MyFile = "c:iSKi_XДЕЛА 2015 ОПОСД.xls"
Const l = "Сводная таблица_2015г"
 
Public rng As Object
 
Sub reportToExcel_Isk()
 
Call StatusBarYes
 
Set xlAppEx = CreateObject("Excel.Application.14") 'создаем объект Excel, чтобы можно было работать с его методами и свойствами
 
Again:
'проверка на открытие файла
If IsOpen(MyFile) Then
    MsgBox "Файл " & MyFile & " УЖЕ кем-то ИСПОЛЬЗУЕТСЯ. Останавливаемся.", vbExclamation
    DoCmd.HourGlass False
    Call Get_UserStatus_Info
    Exit Sub
 
Else
    DoCmd.HourGlass False
    MsgBox "Файл " & MyFile & " никем не используется. Продолжаем...", vbInformation
End If
 
'запрос значения Rowss - указать номер строки под которой надо вставить
Rowss1 = InputBox("Введите номер строки, ПОД которой надо вставить новую строку", "Ввод числа")
 
Dim myReply
 
If Not IsNumeric(Rowss1) Then
        myReply = MsgBox("Номер строки был указан не цифрой. Повторить процедуру?", vbYesNo + vbQuestion + vbApplicationModal, "Ввод номера строки")
        If myReply = vbNo Then
        Exit Sub
        End If
        If myReply = vbYes Then
        MsgBox "Повторяем..."
        GoTo Again
        End If
       
Else: GoTo 1
 
If Rowss1 = "" Then
        myReply = MsgBox("Номер строки не указан. Остановить процедуру?", vbYesNo + vbQuestion + vbApplicationModal, "Ввод номера строки")
        If myReply = vbYes Then
        Exit Sub
        End If
        If myReply = vbNo Then
        MsgBox "Повторяем..."
        GoTo Again
        End If
       
Else: GoTo 1
End If
    
1:
    Dim Msg, Style, Title, Response
    Msg = "Вы правильно указали номер строки ПОД которой вставить? " & " ---> " & Rowss1 & vbCr & "Будет вставлена строка:  ---> " & Rowss1 + 1 & vbCr & "Продолжаем?" 'ns
    Style = vbYesNo + vbQuestion + vbApplicationModal
    Title = "Ввод номера строки"
    
    Response = MsgBox(Msg, Style, Title)
        If Response = vbNo Then    ' User chose No.
            MsgBox "Исправьте значение и продолжайте", vbApplicationModal, "Ввод номера строки"
            GoTo Again
        Else    ' User chose Yes.
            MsgBox "Продолжаем!", vbApplicationModal
        End If
  
End If
 
DoCmd.HourGlass (-1) 'True
    
'Rowss1 = ns
Rowss2 = Rowss1 + 1
 
'strPathExcel = MyFile
Set xlWbkEx = xlAppEx.Workbooks.Open(MyFile)
 
'то добавляем строку
xlWbkEx.Worksheets(l).Rows(Rowss2).Insert
 
'Запомним нашу строку
'Set newrow = xlWbk.Worksheets(L).Rows(Rowss2)
 
With xlWbkEx.Worksheets(l)
    .Rows(Rowss1).Copy
    .Rows(Rowss2).PasteSpecial Paste:=-4122
    .Rows(Rowss2).Select
    
    'динамически формируем адрес нужной ячейки и задаем ей значение
    .Range("A" & Rowss2).Value = "МКП ""Воронежтеплосеть"" "
    .Range("B" & Rowss2).Value = Forms![Данные]![Краткое_наименование] '.Value 'если поле
    .Range("D" & Rowss2).Value = "№ " & Forms![Данные]![Номер_платежки] & " от " & Forms![Данные]![Дата_платежки] '.Value 'если поле
    .Range("E" & Rowss2).Value = Date   '.Value 'если поле
    .Range("F" & Rowss2).Value = "взыскание задолженности за тепловую энергию"
    .Range("G" & Rowss2).Value = Forms![Данные]![Начало_периода] & "-" & Forms![Данные]![Конец_периода]
    .Range("J" & Rowss2).Value = Nz(Forms![Данные]![Сумма_долга], 0) + Nz(Forms![Данные]![Сумма_процентов], 0)
    .Range("X" & Rowss2).Value = "С.А.Калинин"
    
     '  .Range("B10").Value = "B10-наше значение"
     '  .[D5] = Forms![Данные]![Краткое_наименование]
    
    ' задаем диапазон выбора ячеек и задаем им форматирование границ
    'Set rng = .Range("A" & Rowss2, "X" & Rowss2)
    'Call make_border_2
 
End With
 
xlAppEx.CutCopyMode = False
xlAppEx.Visible = True 'запускаем приложение Excel, можно сдвинуть вниз
 
'Set appEx = Nothing 'уничтожаем переменную с объектом
Set xlAppEx = Nothing
Set xlWbkEx = Nothing
'Set ns = Nothing
Set Rowss1 = Nothing
 
Call StatusBarNo
 
End Sub
 
Public Function IsOpen(File$) As Boolean
Dim fn%
fn = FreeFile
On Error Resume Next
Open File For Random Access Read Write Lock Read Write As #fn
Close #fn
IsOpen = Err
End Function
Public Sub Get_UserStatus_Info()
Dim asUsers, sUserName As String, sDateTime As String, sStatus As String
Dim li As Long
 
Dim xlAppExGet As Object
Set xlAppExGet = GetObject(MyFile)
 
 
    On Error Resume Next
 
asUsers = xlAppExGet.Workbooks(MyFile).UserStatus
    
    Select Case Err.number
    Case 9:
        MsgBox "Файл отсутствует? " & vbNewLine & "Номер ошибки: " & Err.number & vbNewLine & "Описание ошибки: " & Err.Description
        'Resume Next
        Err.Clear
        Exit Sub
    End Select
    
 
For li = 1 To UBound(asUsers, 1)
sUserName = sUserName & vbNewLine & asUsers(li, 1) & "; время изменения файла: " & Format(asUsers(li, 2), "dd.mm.yyyy hh:mm")
sDateTime = asUsers(li, 2)
    Select Case asUsers(li, 3)
        Case 1
        sStatus = "Монопольный"
        Case 2
        sStatus = "Общий"
        Case Else
        sStatus = "Не определен"
    End Select
Next
 
MsgBox "Пользователи файла:" & vbNewLine & sUserName & vbNewLine & "Доступ к файлу - " & sStatus
 
Call Get_LogonUser
Call Get_ComputerName
 
Debug.Print IIf(xlAppExGet.Workbooks("c:iSKi_XДЕЛА 2015 ОПОСД.xls").UserStatus(1, 3) = 1, "Exclusive", "Shared")
 
Set xlAppExGet = Nothing
 
End Sub
 
Public Sub Get_LogonUser()
MsgBox "LogonDomain: " & GetLogonDomainuser & " / " & "LogonUser: " & GetLogonUser
End Sub
 
Public Function GetLogonDomainuser() As String
Dim lResult As Long
Dim i As Integer
Dim bUserSid(255) As Byte
Dim sUserName As String
Dim sDomainName As String * 255
Dim lDomainNameLength As Long
Dim lSIDType As Long
sUserName = GetLogonUser
lResult = LookupAccountName(vbNullString, sUserName, bUserSid(0), 255, sDomainName, lDomainNameLength, lSIDType)
sDomainName = Space(lDomainNameLength)
lResult = LookupAccountName(vbNullString, sUserName, bUserSid(0), 255, sDomainName, lDomainNameLength, lSIDType)
If (lResult = 0) Then
MsgBox "Ошибка: невозможно найти имя домена для юзера: " & sUserName
Exit Function
End If
sDomainName = Left$(sDomainName, InStr(sDomainName, Chr$(0)) - 1)
GetLogonDomainuser = Trim(sDomainName)
End Function
Public Function GetLogonUser() As String
Dim strTemp As String, strUserName As String
strTemp = String(100, Chr$(0))
strTemp = Left$(strTemp, InStr(strTemp, Chr$(0)) - 1)
strUserName = String(100, Chr$(0))
GetUserName strUserName, 100
strUserName = Left$(strUserName, InStr(strUserName, Chr$(0)) - 1)
GetLogonUser = strUserName
End Function
 
Public Function UserName() As String
Dim cn As String
Dim ls As Long
Dim Res As Long
cn = String(1024, 0)
ls = 1024
Res = GetUserName(cn, ls)
If Res <> 0 Then
UserName = Mid(cn, 1, InStr(cn, Chr(0)) - 1)
Else
UserName = ""
End If
End Function
 
Public Sub Get_ComputerName()
Dim scomp As String, h As String
 
scomp = Space(255)
h = GetComputerName(scomp, 255)
CompName = Trim(scomp)
MsgBox "Имя компьютера, с которого открыт файл:  " & CompName
End Sub

Как узнать кто работает с файлом с общим доступом?

Michael_S

Дата: Понедельник, 31.10.2016, 19:16 |
Сообщение № 1

Группа: Друзья

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

Сообщений: 2012


Репутация:

373

±

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


Excel2016

Всем Привет!
По сути весь вопрос в названии.
Имеем файл в общем доступе — Вася, Петя, Катя, Маша…
Как можно узнать, кто именно правит файл в данный момент? В этом же файле.

 

Ответить

krosav4ig

Дата: Понедельник, 31.10.2016, 20:04 |
Сообщение № 2

Группа: Друзья

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

Сообщений: 2346


Репутация:

989

±

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


Excel 2007,2010,2013

Здравствуйте
наверно как-то так
[vba]

Код

Sub dd()
    Dim wb As Workbook, uSt(), i&
    Set wb = Application.Workbooks(«shared.xlsx»)
    uSt = wb.UserStatus
    If UBound(uSt) < 2 Then Exit Sub
    For i = 1 To UBound(uSt)
        If uSt(i, 1) <> Application.UserName Then
            Debug.Print «пользователь » & uSt(i, 1) & » открыл книгу » & Format(uSt(i, 2), «dd.MM.yyyy hh:mm»)
        End If
    Next
End Sub

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

Michael_S

Дата: Понедельник, 31.10.2016, 21:03 |
Сообщение № 3

Группа: Друзья

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

Сообщений: 2012


Репутация:

373

±

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


Excel2016

Спасибо, но ошибка на строчке [vba]

Код

Set wb = Application.Workbooks(«shared.xlsx»)

[/vba]
shared.xlsx — это что за книга?

Сообщение отредактировал Michael_SПонедельник, 31.10.2016, 21:06

 

Ответить

Roman777

Дата: Понедельник, 31.10.2016, 21:34 |
Сообщение № 4

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

Ранг: Ветеран

Сообщений: 980


Репутация:

127

±

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


Excel 2007, Excel 2013

Michael_S, вероятно, расшаренная (с общим доступом).


Много чего не знаю!!!!

 

Ответить

krosav4ig

Дата: Понедельник, 31.10.2016, 21:52 |
Сообщение № 5

Группа: Друзья

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

Сообщений: 2346


Репутация:

989

±

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


Excel 2007,2010,2013

shared.xlsx — это что за книга

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


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4igПонедельник, 31.10.2016, 21:53

 

Ответить

Michael_S

Дата: Вторник, 01.11.2016, 11:29 |
Сообщение № 6

Группа: Друзья

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

Сообщений: 2012


Репутация:

373

±

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


Excel2016

Что я делаю не так?
По нажатию кнопки в А1 должно быть имя пользователя

К сообщению приложен файл:

5347863.xlsm
(23.1 Kb)

 

Ответить

Manyasha

Дата: Вторник, 01.11.2016, 12:32 |
Сообщение № 7

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

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

Сообщений: 2198


Репутация:

898

±

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


Excel 2010, 2016

Michael_S, здравствуйте. Макрос рассчитан на то, чтобы выводить пользователей, кроме текущего, т.е. всех, кроме Вас.
Попробуйте закомментировать строчки с проверкой на количество пользователей и на имя пользователя:
[vba]

Код

Sub dd()
‘ Узнать имя пользователя
    Dim wb As Workbook, uSt(), i&
    Set wb = ThisWorkbook
    uSt = wb.UserStatus
‘    If UBound(uSt) < 2 Then Exit Sub
    For i = 1 To UBound(uSt)
‘        If uSt(i, 1) <> Application.UserName Then
            Cells(i, 1) = «пользователь » & uSt(i, 1) & » открыл книгу » & Format(uSt(i, 2), «dd.MM.yyyy hh:mm»)
‘        End If
    Next
End Sub

[/vba]

К сообщению приложен файл:

7262383.xlsm
(21.9 Kb)


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Michael_S

Дата: Вторник, 01.11.2016, 12:50 |
Сообщение № 8

Группа: Друзья

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

Сообщений: 2012


Репутация:

373

±

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


Excel2016

Manyasha, Спасибо! hands

[p.s.]А как вам удалось сохранить изменения в VВA?
У меня

не сохраняет, приходится каждый раз создавать новую книгу
Разобрался
[/p.s.]

Сообщение отредактировал Michael_SВторник, 01.11.2016, 13:38

 

Ответить

Alex_ST

Дата: Среда, 02.11.2016, 09:46 |
Сообщение № 9

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

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


2003

Михаил, к сожалению это не решит проблему идентификации пользователей книги, размещённой в общем доступе.
Ведь получаете Вы не уникальные в Вашей LAN имена компьютеров, а имена пользователей Офиса, задаваемые при его установке. А они вовсе никак не связаны с именами компьютеров и могут быть любыми.
У нас IT-шники вообще не парятся с этим и всем дают имена User.
А потом кто хочет и может сам это имя сменить на какое угодно.



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Michael_S

Дата: Среда, 02.11.2016, 10:23 |
Сообщение № 10

Группа: Друзья

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

Сообщений: 2012


Репутация:

373

±

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


Excel2016

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

 

Ответить

Alex_ST

Дата: Среда, 02.11.2016, 21:51 |
Сообщение № 11

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

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


2003

Ну так по сетевому-то имени можно однозначно комп в домене вычислить, а по имени пользователя Офиса — нет.
А получить сетевое имя ничуть не сложнее:[vba]

Код

Private Sub Net_UserName()
Debug.Print CreateObject(«Wscript.Network»).UserName
End Sub

[/vba]



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Michael_S

Дата: Среда, 02.11.2016, 21:55 |
Сообщение № 12

Группа: Друзья

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

Сообщений: 2012


Репутация:

373

±

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


Excel2016

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

 

Ответить

Alex_ST

Дата: Среда, 02.11.2016, 22:03 |
Сообщение № 13

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

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


2003

На выходе — это где?
В моём примере сетевое имя юзверга просто выводится для наглядности в окно Immediate
:'(
Ой, блин!
Я же совсем оплошал. На компе ты сможешь только своё сетевое имя узнать, а не имена тех, кто в сети юзает файл.
Прошу прощения. Действительно, только через .UserStatus можно узнать то, что тебе нужно.



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Александр7034

Дата: Пятница, 17.02.2023, 09:16 |
Сообщение № 14

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

Ранг: Участник

Сообщений: 52

Ну так по сетевому-то имени можно однозначно комп в домене вычислить, а по имени пользователя Офиса — нет.
А получить сетевое имя ничуть не сложнее:
Private Sub Net_UserName()
Debug.Print CreateObject(«Wscript.Network»).UserName
End Sub

А как применить этот код?
Суть в том что, на сетевом диске документ. К нему есть общий доступ у пользователей находящихся в домене. Колонка F5:F100 оставлена для комментариев. Как в соседних с ней колонках E5:E100 фиксировать время дату написавшего комментарий? А в D5:D100 его сетевое имя.

Сообщение отредактировал Александр7034Пятница, 17.02.2023, 09:23

 

Ответить

bigor

Дата: Пятница, 17.02.2023, 16:31 |
Сообщение № 15

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

Ранг: Ветеран

Сообщений: 804


Репутация:

163

±

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


нет

А как применить этот код?

Ой, блин!
Я же совсем оплошал. На компе ты сможешь только своё сетевое имя узнать

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

 

Ответить

wehy

Дата: Воскресенье, 19.02.2023, 13:16 |
Сообщение № 16

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

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

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


Пусть

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

В принципе зная логин можно сделать автоподмену на реальное имя. Подскажите, как в отдельный столбец вписать дату а в другой логин?

Сообщение отредактировал wehyВоскресенье, 19.02.2023, 13:35

 

Ответить

bigor

Дата: Воскресенье, 19.02.2023, 22:24 |
Сообщение № 17

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

Ранг: Ветеран

Сообщений: 804


Репутация:

163

±

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


нет

зная логин можно сделать автоподмену на реальное имя

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

 

Ответить

wehy

Дата: Понедельник, 20.02.2023, 00:30 |
Сообщение № 18

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

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

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


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

Имелось ввиду вытащит код сетевое имя, что то вроде IvanovPC_sklad. Заранее можно будет вписать таблицу с реальными именами, которые всем будут понятны, нежели сетевой логин. Ну а потом функцией ВПР проставятся реальные имена вместо логинов.

 

Ответить

Александр7034

Дата: Понедельник, 20.02.2023, 11:08 |
Сообщение № 19

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

Ранг: Участник

Сообщений: 52

Проверьте пожалуйста. Наваял код не понимая половины, просто подсматривая как в других местах сделали что то схожее. Вроде работает, но может пропустил подводные камни какие, или в цикле что то останется. Если написать в колонке F2:F9 то в соседних ячейках слева появится сетевое имя отписавшего и время комментария.
[vba]

Код

Private Sub Worksheet_Change(ByVal Target As Range)
username2 = CreateObject(«WScript.Network»).UserName
If Not Intersect(Target, Range(«F2:F9»)) Is Nothing Then
Target.Offset(, -1) = Now
Target.Offset(, -2) = username2
End If
End Sub

[/vba]

ps/ Оказалось есть проблемы, если выделить несколько колонок и жать delete для удаления написанного то имя и дата смещаются еще левее или же может выскочить ошибка.

Сообщение отредактировал Александр7034Понедельник, 20.02.2023, 11:20

 

Ответить

Public Sub Get_LogonUser()
MsgBox "LogonDomain: " & GetLogonDomainuser & " / " & "LogonUser: " & GetLogonUser
End Sub
 
Public Function GetLogonDomainuser() As String
Dim lResult As Long
Dim i As Integer
Dim bUserSid(255) As Byte
Dim sUserName As String
Dim sDomainName As String * 255
Dim lDomainNameLength As Long
Dim lSIDType As Long
sUserName = GetLogonUser
lResult = LookupAccountName(vbNullString, sUserName, bUserSid(0), 255, sDomainName, lDomainNameLength, lSIDType)
sDomainName = Space(lDomainNameLength)
lResult = LookupAccountName(vbNullString, sUserName, bUserSid(0), 255, sDomainName, lDomainNameLength, lSIDType)
If (lResult = 0) Then
MsgBox "Ошибка: невозможно найти имя домена для юзера: " & sUserName
Exit Function
End If
sDomainName = Left$(sDomainName, InStr(sDomainName, Chr$(0)) - 1)
GetLogonDomainuser = Trim(sDomainName)
End Function
Public Function GetLogonUser() As String
Dim strTemp As String, strUserName As String
strTemp = String(100, Chr$(0))
strTemp = Left$(strTemp, InStr(strTemp, Chr$(0)) - 1)
strUserName = String(100, Chr$(0))
GetUserName strUserName, 100
strUserName = Left$(strUserName, InStr(strUserName, Chr$(0)) - 1)
GetLogonUser = strUserName
End Function
 
Public Function UserName() As String
Dim cn As String
Dim ls As Long
Dim Res As Long
cn = String(1024, 0)
ls = 1024
Res = GetUserName(cn, ls)
If Res <> 0 Then
UserName = Mid(cn, 1, InStr(cn, Chr(0)) - 1)
Else
UserName = ""
End If
End Function
 
Public Sub Get_ComputerName()
Dim scomp As String, h As String
 
scomp = Space(255)
h = GetComputerName(scomp, 255)
CompName = Trim(scomp)
MsgBox "Имя компьютера, с которого открыт файл:  " & CompName
End Sub

Содержание

  1. Vba excel как узнать кто открыл файл
  2. Vba excel как узнать кто открыл файл
  3. Вопрос
  4. Все ответы
  5. Отслеживание входа пользователей в книгу Excel
  6. Этап 1. Создаем «Лог»
  7. Этап 2. Макросы фиксации входа-выхода
  8. Этап 3. Улучшаем надежность
  9. Как узнать кем открыт файл excel
  10. Как определить кто открыл файлы в сетевой папке и сбросить сессии пользователя в Windows Server
  11. Вывести список открытых файлов на файловом сервере Windows
  12. Как определить какой пользователь открыл файл
  13. Как закрыть открытый файл
  14. Как удаленно закрыть открытые файлы с помощью PowerShell
  15. Как узнать кем открыт файл excel
  16. Вопрос
  17. Все ответы
  18. Как узнать кем открыт файл excel
  19. Идея контроля
  20. Пошаговая инструкция
  21. Настройка защиты
  22. Активация защиты
  23. Деактивация защиты
  24. Отчёт от защиты
  25. Технические замечания для профессионалов
  26. Предупреждение
  27. Скачать программу
  28. Версия 1.00 от 12.04.2015
  29. Отслеживание исправлений в Excel
  30. Общие сведения об отслеживании исправлений в Excel
  31. Как включить режим отслеживания исправлений
  32. Вынесение всех исправлений на отдельный лист
  33. Файл формата XLS: чем открыть онлайн, на компьютере, андроиде
  34. Краткое описание формата XLS
  35. Как открыть файл XLS расширения
  36. Как открыть файл XLS онлайн
  37. Открываем XLS на Андроиде
  38. Открываем файл XLS на компьютере
  39. Чем открыть XLS в Windows 10
  40. Чем открыть XLS в Windows 7
  41. Какие еще могут быть проблемы с файлом XLS

Vba excel как узнать кто открыл файл

Суть в следующем.

Есть таблица на одном листе файла Excel (этот файл не в общем доступе). Данная таблица, грубо говоря, разбита на несколько блоков. Каждый из этих блоков должен заполняться разными сотрудниками.

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

Для решения этой задачи задумка предлагается следующая.

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

Как макросом заблокировать другие блоки мне понятно. Но не понятно как определить сетевое имя компьютера.

Можете подсказать возможный вариант?

Буду очень признателен.

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

а ЕСЛИ . сотрудник зашел(сел поработать) на другом компьютере ?
его компьютер сломался и запасного настроенного точь-в-точь (с тем же сетевым именем) нет и быть увы не может.
он будет редактировать данные другого пользователя?
и не сможет исправлять свои ?!

для этих целей существуют ПОЛЬЗОВАТЕЛЬ текущий (user current)
GetCurrentUser

банальное имя пользователя не устроит?

ох, я бы на вашем месте посмотрел в сторону сетевого решения (банальный веб-сервер + серверная часть + любая БД = решение вашей задачи).

можно и сетевое имя получить.

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

банальное имя пользователя не устроит?

ох, я бы на вашем месте посмотрел в сторону сетевого решения (банальный веб-сервер + серверная часть + любая БД = решение вашей задачи).

Источник

Vba excel как узнать кто открыл файл

Вопрос

в VBScript пытаюсь создать подключение к excel файлу. но эта книга лежит на сервере, иногда эта книга бывает занята другим пользователем. как я могу получить имя пользователя кто занял данную таблицу? уведомление во вложении. Имя пользователя как зарегистрирован в office

я могу читать данные о пользователях через aplication.userstatus. но для этого она должна быть открыта для редактирования нескольким пользователям. Как можно узнать кем занята книга для редактирования

Все ответы

во вложении изображении скриншоты что я хочу видеть

По данным вами ссылкам, результат един:

Да, я Жук, три пары лапок и фасеточные глаза :))

во вложении изображении скриншоты что я хочу видеть

The opinion expressed by me is not an official position of Microsoft

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

и еще тут описан воркераунд по вашей теме. и еще одно похожее обсуждение

The opinion expressed by me is not an official position of Microsoft

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

На вкладке Правка в списке Файл открыт следующими пользователями просмотрите имена пользователей.

Да, я Жук, три пары лапок и фасеточные глаза :))

На вкладке Правка в списке Файл открыт следующими пользователями просмотрите имена пользователей.

Да, я Жук, три пары лапок и фасеточные глаза :))

The opinion expressed by me is not an official position of Microsoft

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

«Если при попытке открыть файл, файл можно открыть только в режиме «Только для чтения», VBA выводит окно «Файл занят пользователем: Имярек», в противном случае открыть файл на редактирование.»

Допускаю, что ему необходим «UserName» или его аналог для VBA.

Да, я Жук, три пары лапок и фасеточные глаза :))

да мне нужно это. как можно реализовать?

Да, я Жук, три пары лапок и фасеточные глаза :))

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

По вашему скриншоту, файл не является Общей книгой и открыт в монопольном режиме :

Дополните, что у вас имеется уже сейчас, и что может ваш макрос.

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

и не нужно было бы создавать макрос, так как Общая книга открывается для редактирования у всех открывающих Общую книгу:

При наличии Skype, вы также могли бы обмениваться мгновенными сообщениями с совместно работающими пользователями.

Да, я Жук, три пары лапок и фасеточные глаза :))

Источник

Отслеживание входа пользователей в книгу 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

Как определить кто открыл файлы в сетевой папке и сбросить сессии пользователя в Windows Server

Администраторы файловых серверов Windows часто сталкиваются с необходимостью принудительного закрытия файлов, открытых пользователями. Такая задача возникает при одновременной работы с одним файлом нескольких пользователей. Часто при некорректной работе ПО или неправильном завершении сессии пользователем, файлы в сетевой папке оказываются открытыми и заблокированными, и остальные пользователи не могут вносить в него изменения. В этой статье мы покажем, как получить список открытых файлов на файловом сервере, узнать какие пользователи их используют, и способы сброса этих файловых сессий.

Вывести список открытых файлов на файловом сервере Windows

Список открытых пользователями файлов на файловом сервере Windows можно получить с помощью стандартной графической консоли Computer Management (Управление компьютером — compmgmt.msc ).

Запустите на файловом сервере консоль Computer Management (или подключитесь к нему удаленно консолью со своего компьютера) и перейдите в секцию System Tools -> Shared Folders -> Open files (Служебные программы -> Общие папки -> Открыты файлы). В правой части окна отображается список файлов сервера, открытых удаленно . Список содержит локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write+Read).

Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles . Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу:

Openfiles /Query /fo csv |more

При удаленном доступе пользователя к папке или файлу в сетевой папке (SMB) на сервере, для пользователя создается новая сессия, определяющая данное подключение. Управление подключениями пользователей осуществляется именно через эти идентификаторы сессий.

Эту же команду можно выполнить удаленно, например, нужен список открытых файлов на файловом сервере mskfs01:

Openfiles /Query /s mskfs01 /fo csv

У команды Openfiles есть еще одна интересная возможность просмотра списка локально открытых файлов. Для ее использования нужно включить опцию Maintain Objects List (Построение списка объектов) командой openfiles /local on и перезагрузить сервер. После этого в список начнут попадать файлы, открытые локальными процессами (этот режим желательно использовать только для отладки, т.к. может негативно сказаться на производительности сервера).

Как определить какой пользователь открыл файл

Чтобы определить пользователя, который открыл (заблокировал) файл cons.adm на сервере, выполните команду:

Openfiles /Query /s mskfs01 /fo csv | find /i «cons.adm»

Ключ /i используется, чтобы выполнялся регистронезависимый поиск

Естественно, можно указать только часть имени файла. К примеру, нам нужно узнать кто открыл xlsx файл, в имени которого есть строка farm, воспользуемся таким конвейером:

Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «xlsx»

Можно, конечно найти файл и в графической консоли Computer Management, но это менее удобно (консоль не предусматривает возможность поиска).

Как закрыть открытый файл

Чтобы закрыть открытый файл, нужно найти его в списке файлов секции Open File и в контекстном меню выбрать пункт « Close Open File ».

Если на файловом сервере сотни открытых файлов, найти их в консоли будет непросто. Удобнее воспользоваться утилитой Openfiles . Как мы уже говорили, она возвращает ID сессии открытого файла. Именно по этому ID сессии, файл можно принудительно закрыть, сбросив подключение. Находим ID нужного файла:

Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «.xlsx»

Отключаем от него пользователя по полученному идентфикатору:

Openfiles /Disconnect /s mskfs01 /ID 67109098

Как удаленно закрыть открытые файлы с помощью PowerShell

В Windows Server 2012 / Windows 8 в PowerShell появились командлеты для работы с шарами и файлами на SMB сервере. Данные командлеты можно использовать для удаленного сброса подключений к открытому файлу.

Список открытых файлов можно получить с помощью командлетов Get- SMBOpenFile , а закрыть файл (сбросить подключение) с помощью Close-SmbOpenFile .

Итак, подключаемся к удаленному серверу:

$sessn = New-CIMSession –Computername mskfs01

Находим и закрываем открытый файл pubs.docx одной командой:

Get-SMBOpenFile -CIMSession $sessn | where | Close-SMBOpenFile -CIMSession $sessn

Подтверждаем закрытие файла, нажав Y.

Чтобы убрать подтверждение принудительного закрытия файла на сервере, используйте ключ -Force

Эти же команды можно использовать, к примеру, чтобы закрыть все файлы, открытые некоторым пользователем (пользователь ушел домой и не освободил файлы). К примеру, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните

Get-SMBOpenFile -CIMSession $sessn | where |Close-SMBOpenFile -CIMSession $sessn

Как узнать кем открыт файл excel

Вопрос

в VBScript пытаюсь создать подключение к excel файлу. но эта книга лежит на сервере, иногда эта книга бывает занята другим пользователем. как я могу получить имя пользователя кто занял данную таблицу? уведомление во вложении. Имя пользователя как зарегистрирован в office

я могу читать данные о пользователях через aplication.userstatus. но для этого она должна быть открыта для редактирования нескольким пользователям. Как можно узнать кем занята книга для редактирования

Все ответы

во вложении изображении скриншоты что я хочу видеть

  • Изменено marat1905 19 июня 2018 г. 10:30

По данным вами ссылкам, результат един:

Да, я Жук, три пары лапок и фасеточные глаза :))

  • Изменено Жук MVP, Moderator 19 июня 2018 г. 11:37

во вложении изображении скриншоты что я хочу видеть

The opinion expressed by me is not an official position of Microsoft

  • Изменено marat1905 19 июня 2018 г. 19:34

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

и еще тут описан воркераунд по вашей теме. и еще одно похожее обсуждение

The opinion expressed by me is not an official position of Microsoft

  • Изменено Vector BCO Moderator 19 июня 2018 г. 20:49

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

На вкладке Правка в списке Файл открыт следующими пользователями просмотрите имена пользователей.

Да, я Жук, три пары лапок и фасеточные глаза :))

На вкладке Правка в списке Файл открыт следующими пользователями просмотрите имена пользователей.

Да, я Жук, три пары лапок и фасеточные глаза :))

насколько я понимаю нужно тоже самое но на vb

The opinion expressed by me is not an official position of Microsoft

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

«Если при попытке открыть файл, файл можно открыть только в режиме «Только для чтения», VBA выводит окно «Файл занят пользователем: Имярек», в противном случае открыть файл на редактирование.»

Допускаю, что ему необходим «UserName» или его аналог для VBA.

Да, я Жук, три пары лапок и фасеточные глаза :))

Да, я Жук, три пары лапок и фасеточные глаза :))

  • Изменено marat1905 20 июня 2018 г. 11:02

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

По вашему скриншоту, файл не является Общей книгой и открыт в монопольном режиме :

Дополните, что у вас имеется уже сейчас, и что может ваш макрос.

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

и не нужно было бы создавать макрос, так как Общая книга открывается для редактирования у всех открывающих Общую книгу:

При наличии Skype, вы также могли бы обмениваться мгновенными сообщениями с совместно работающими пользователями.

Да, я Жук, три пары лапок и фасеточные глаза :))

Как узнать кем открыт файл excel

Случалось ли вам волноваться по поводу утечки корпоративных или личных данных за пределы круга допущенных к ним лиц? Если вы руководитель, скажем, отдела, то, я думаю, ответ будет утвердительным. А если же вы руководитель более крупного ранга или хозяин бизнеса, то эти «волнения», полагаю, у многих носят перманентный характер, плавно переходящий в невроз. Но как узнать, кто помимо авторизованных лиц просматривает ваши файлы? Об этой задаче я думал давно, но для успешной реализации всегда чего-то не хватало. И вот недавно, наконец, все компоненты нашлись, сложились в единое целое и я готов вам представить готовый продукт.

Идея контроля

Предположим, что вы — владелец важной бизнес-информации, которую вы храните в формате MS Excel. Информация реально важна и доступ к ней имеют небольшое количество приближенных сотрудников. Утечка крайне нежелательна и создаёт серьёзные риски для бизнеса. Согласитесь, что было бы хорошо, если бы вы получали сигнал, о том, что ваш важный конфиденциальный файл вдруг открывает человек, который этого делать не должен. Да простят меня айтишники, но в половине случаев это именно они 🙂 Либо это авторизованный сотрудник перепоручил свою работу секретарю, либо ваш файл уже вышел за пределы компании и его смотрит бог знает кто. Перед вами именно такая защита.

Идея в том, что в файл встраивается программный код, который пришлёт вам электронное письмо, когда файл кто-то открывает. Идея простая, но условия для её осуществления наступили сравнительно недавно. Основное условие — повальное распространение интернета. То есть файл сможет подать вам весточку, только если у него будет доступ в интернет. А это сейчас практически везде. Мне возразят, что доступ во многих организациях не прозрачный, что для выхода в интернет может требоваться авторизация, что почтовые протоколы так вообще закрыты в 90% организаций. Это всё так. Однако, тенденции таковы, что доступ в сеть всё больше и больше облегчают, так как и бизнес всё больше сливается с сетью, облачные технологии победно шагают по планете, в сети появляется масса бесплатных и интересных для бизнеса сервисов. Для всего этого требуется широкополосный доступ в интернет, а не через прокси сервер, который в сколь-нибудь большой компании просто не прокачает такой трафик. А уж дома у людей вообще всё хорошо — любой утюг скоро без интернета будет отказываться работать.

Второе возражение, которое я услышу будет такое: «Ха! Ну и кто же позволит запустить твоему файлу макросы?» На это я скажу, что этот аспект меня беспокоит куда меньше наличия доступа в сеть, так как в подавляющем своём большинстве люди — ни ухом ни рылом в макросах. Файл открылся — и слава Богу. Далее, если макросы не будут разрешены для этого файла, то человек просто не увидит данных. Он увидит, вот такую невинную заставку:

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

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

Ну и последнее возражение: «Вся эта защита в Excel ломается за 1 минуту». И я должен сказать, что это правда. Любая стандартная защита Excel потрошится весьма быстро, однако, много ли вы лично знаете таких потрошителей? Ради интереса проведите опрос среди своих друзей, знакомых и коллег. Задайте один единственный вопрос, почему на планете Земля существует такое явление, как смена времён года (зима и лето). Провели? Если люди в своём подавляющем большинстве не знают ТАКИЕ фундаментальные вещи, то о каком потрошении защиты Excel вы изволите говорить? Смешно! Всё это будет работать на УРА в 80-90% случаев.

Пошаговая инструкция

Настройка защиты

В файле есть лист Signal , на котором находятся все немногочисленные настройки.

Пройдёмтесь по полям:

Поле Кому — это ваш реальный ящик, который будет принимать письма от файла (файлов). Я рекомендую создать вам отдельный ящик для этих целей на популярных ресурсах (Google, Yandex, etc). Адрес warning@mail.box вымышленный, с ним ничего работать не будет.

Поле От кого — от имени этого адреса к вам придёт письмо. Поле надо заполнить. Можно оставить то, что вы видите на экране. Если вы захотите ввести что-то своё, то позаботьтесь, чтобы это напоминало реальный почтовый адрес, так как я не тестировал, как система отреагирует на произвольные текстовые константы в этом поле. Русских букв тут быть не должно.

Поле Тема уведомления — тема должна вам подсказывать, о каком вашем файле идёт речь, так как подобных файлов у вас может быть несколько (бизнес-план, зарплаты сотрудников). Только латинские буквы и арабские цифры!

Поле Белый список ПК — это список серийных номеров компьютеров, с которых уведомления присылаться не будут, так как это авторизованные компьютеры. Кнопка Добавить этот ПК добавляет серийный номер компьютера, на котором в данный момент запущен файл. Список можно править руками.

Поле Пользователь SendGrid . Вот тут внимательно. Для отправки сообщений я пользуюсь сервисом с ресурса https://sendgrid.com/, который позволяет отправлять до 400 сообщений в день бесплатно. Пользователь DSB75 и пароль к нему — это мой пользователь, которого я специально зарегистрировал для тестовых целей. Если данный инструмент будет хоть немного популярен, а это вполне вероятно, то свой лимит в 400 сообщений этот пользователь быстро выберет и всё у всех перестанет работать. Поэтому! Если вы всерьёз хотите от чего то защищаться, то вам необходимо самостоятельно зарегистрировать бесплатный эккаунт на этом сервисе и прописать своего пользователя и пароль к нему.

Поле Пароль SendGrid — пароль хранится в зашифрованном виде, штатно посмотреть, какой сейчас пароль нельзя. Будьте внимательны при вводе.

Кнопка Тестовое сообщение . Заполнив все поля, согласно этой инструкции, вы можете протестировать работает ли отправка. Она должна работать. Если нет, то пишите мне.

Ваши данные должны быть скопированы в мой файл, а не наоборот. В вашем файле не должно быть макросов.

Держите в тайне информацию, что файл защищён.

У защищенных файлов появляется очень важная особенность — их невозможно закрыть без сохранения. Если вы выходите из файла, то он сохранит себя принудительно. В противном случае этот тип защиты невозможен. Учитывайте это! Если что-то не то сделали в файле, то отменяйте через Ctrl + Z , выйти без сохранения не получится.

Активация защиты

Призведите настройку согласно раздела «Настройка защиты»

На листе Signal нажмите кнопку Активировать .

Выйдите из файла. Он сохранит изменения автоматически.

Переименуйте файл, если в этом есть необходимость.

Запустите файл снова. Вы должны увидеть, что лист Signal исчез (он становится скрытым) и видны только листы с данными. Однако, если файл запущен с выключенными макросами, то вы увидите единственный лист Info с предложением включить макросы для корректной работы с файлом (иллюстрация уже приводилась в начале статьи).

Деактивация защиты

Для деактивации защиты, поскольку лист Signal скрыт, предусмотрен специальный алгоритм — на любом листе файла в ячейку с адресом WWW1 введите 1. Чтобы быстро перейти на WWW1 введите адрес ячейки в вдресной строке:

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

Отчёт от защиты

Вот отчёт, который сформирован на моём ноутбуке:

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

Имя пользователя MS Office — многие указывают своё настоящее имя тут:

Имя пользователя — это имя пользователя на компьютере

Доменное имя пользователя — в корпоративной среде имена пользователей регистрируются на специальных серверах. Если это поле заполнено, то пользователь явно трудится в какой-то компании с достаточно развитой IT инфраструктурой

Имя домена — имя так называемого домена MS Active Directory. Часто имя домена соответствует названию компании.

Доменное полное имя — полное имя в домене. Если пользователь в домене может называться RU522123, то тут уже может быть расшифровка (типа Batianov Denis).

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

Модель компьютера — информация о точной модели ПК злоумышленника явно не повредит.

Серийный номер компьютера — это убойное доказательство. Ключевое поле.

IP и MAC адреса — для специалистов также будут иметь значение, особенно в корпоративной среде. MAC адрес уникален, выдача IP логируется на сервере. Хотя, имея серийный номер ПК — это уже нюансы, как говорится «до кучи».

Операционная система — ну и этот параметр не помещает.

Таким образом, скорее всего у вас будет достаточно зацепок, чтобы предположить, кто стибрил файлик. Данный инструмент может несколько ускорить естественный отбор в стане IT специалистов. Ну что ж . Звание специалиста надо заслужить.

Технические замечания для профессионалов

Мне очень понравился сервис SendGrid. Сообщения я отправляю методом HTTP POST. Это позволяет отправить сообщение, если в компании открыт только TCP 80. SMTP порты, конечно же, в 99% организаций закрыты наглухо. Рекомендую ознакомиться с кодом отправки сообщений.

Наконец-то научился делать профессиональные формы по типу приведенной выше с настройками программы. Согласитесь, выглядит отлично.

Всю идентификационную информацию добываю в основном через WMI классы. Если вы ранее с ними не сталкивались, то посмотрите — это довольно интересно и просто.

Механизм ввода и хранения пароля тоже довольно любопытен.

Ну и последнее, что заслуживает внимания, это реализация динамического скрытия / показа листов. При сохранении все листы кроме Info скрываются на случай, если следующий запуск будет без макросов.

Предупреждение

ГРАЖДАНЕ! ДАННОЕ СРЕДСТВО ПРЕДНАЗНАЧЕНО ДЛЯ ЗАЩИТЫ ВАШИХ ДАННЫХ. Я КАТЕГОРИЧЕСКИ ВОЗРАЖАЮ, ЧТОБЫ ВЫ ЕГО ИСПОЛЬЗОВАЛИ ДЛЯ ЛЮБЫХ ИНЫХ ЦЕЛЕЙ. ИСПОЛЬЗУЙТЕ ДАННЫЙ ИНСТРУМЕНТ НА СВОЙ СТРАХ И РИСК. Я НЕ НЕСУ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ПРЯМЫЕ И/ИЛИ КОСВЕННЫЕ НЕГАТИВНЫЕ ПОСЛЕДСТВИЯ, ЕСЛИ ВДРУГ ТАКОВЫЕ БУДУТ ИМЕТЬ МЕСТО. В ТО ЖЕ ВРЕМЯ Я ПОДТВЕРЖДАЮ, ЧТО ДАННАЯ ПРОГРАММА СОДЕРЖИТ В СЕБЕ ТОЛЬКО ЗАЯВЛЕННУЮ ФУНКЦИОНАЛЬНОСТЬ И НИЧЕГО СВЕРХ НЕЁ.

Скачать программу

Версия 1.00 от 12.04.2015

Если вы вдруг почувствовали внезапное непреодолимое желание отблагодарить автора, то вы можете это сделать тут:

Отслеживание исправлений в Excel

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

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

Общие сведения об отслеживании исправлений в Excel

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

Существует ряд исправлений, которые Excel не может отслеживать. Перед использованием данной опции советуем Вам ознакомиться на сайте компании Microsoft со списком изменений, которые не отслеживаются и не выделяются.

Вы не сможете использовать режим отслеживания исправлений, если рабочая книга включает в себя таблицы. Чтобы удалить таблицу: выделите её, перейдите на вкладку Конструктор, а затем выберите команду Преобразовать в диапазон.

Как включить режим отслеживания исправлений

  1. На вкладке Рецензирование нажмите команду Исправления, а затем в выпадающем меню выберите пункт Выделить исправления.
  2. В появившемся диалоговом окне Исправления установите флажок Отслеживать исправления. Убедитесь, что выбран пункт Выделять исправления на экране, а затем нажмите OK.
  3. Если появится запрос для подтверждения сохранения книги, нажмите ОК.
  4. Режим отслеживания исправлений будет включен. Теперь любая отредактированная ячейка будет помечаться цветной границей и треугольником в верхнем левом углу. Если рецензентов несколько, каждому из них будет присвоен свой цвет.
  5. Выберите любую отредактированную ячейку, чтобы увидеть перечень внесенных изменений. В следующем примере мы изменили содержимое ячейки E6 с “?” на “Андрей”.

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

Вынесение всех исправлений на отдельный лист

В Excel есть возможность просматривать изменения на отдельном листе, который называется Журнал изменений. В данном журнале приводится список всех изменений в книге, включая Старое значение (прежнее содержимое ячейки) и Значение (текущее содержимое ячейки).

  1. Сохраните рабочую книгу.
  2. На вкладке Рецензирование выберите команду Исправления, а затем в выпадающем меню нажмите Выделять исправления.
  3. В появившемся диалоговом окне Исправления установите флажок Вносить изменения на отдельный лист, затем нажмите OK.
  4. Исправления будут приводиться на отдельном листе с названием Журнал.

Чтобы удалить Журнал изменений из рабочей книги Excel, можно либо сохранить книгу, либо снять флажок Вносить изменения на отдельный лист в диалоговом окне Исправления.

Файл формата XLS: чем открыть онлайн, на компьютере, андроиде

XLS — формат, в котором хранятся таблицы, если информация заполняется в программе Excel, входящей в.

XLS, расшифровка Extended Cells — формат, в котором хранятся таблицы, если информация заполняется в программе Excel, входящей в Microsoft Office 2003.

Сейчас пользователи работают в Microsoft Office 2007, 2010 и 2016, в которых табличная информация хранится в формате XLSX.

Рассмотрим 2 вопроса:

  • как открыть файл XLS, созданный в Эксель 2003, на компьютере с офисными приложениями 2010, 2013 или 2016;
  • чем открыть файл XLS онлайн.

Краткое описание формата XLS

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

XLS – один из востребованных табличных форматов. Но книгу XLS открыть, просмотреть и отредактировать обычными текстовыми редакторами не удастся. Поэтому вопрос «чем открыть XLS?» возникает достаточно часто.

Как открыть файл XLS расширения

Для этого нужна специальная программа – Microsoft Excel, входящая в состав Microsoft Office.

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

Как открыть файл XLS онлайн

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

Для этой цели созданы следующие ресурсы:

Далее — нажать знак «плюс» (+), после чего откроется пустая таблица.

Потом нужно последовательно нажать на «Файл», затем на «Открыть», выбрать в списке «Загрузка» и найти нужный файл на стационарном компьютере.

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

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

Нажимаем на изображение лупы, и в открывшемся окне – на кнопку «Обзор», после чего выбираем необходимый файл на жёстком диске.

Затем — нажимаем кнопку «View document» (расположена справа), начнется процедура обработки файла.

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

  • Google Docs Viewer для Мозилла;
  • Google Docs для Хром.

Открываем XLS на Андроиде

Фирма Майкрософт разработала бесплатные программы, специально предназначенные для работы с таблицами Эксель на андроиде:

Эти программы бесплатны и есть на нашем сайте.

QuickOffice позволяет обращаться к популярным облачным хранилищам — Dropbox, Google Docs и просматривать размещенные там файлы с возможностью их редактирования.

Открываем файл XLS на компьютере

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

Наиболее распространённое средство, позволяющее открыть файл XLS – текстовый процессор Excel, входящий в стандартный пакет программ MS Office.

Если же в вашей системе не установлен пакет программ MS Office от компании Майкрософт, можно использовать аналогичные, но бесплатные программы.

Самые используемые из них:

Для открытия файла XLS нужно запустить программу Calc, входящую в Open Office и LibreOffice. Calc дублирует функции Excel.

Чем открыть XLS в Windows 10

Более 30% пользователей предпочитают использовать для этой цели Microsoft Office 2010, поскольку этот пакет привычен и удобен.

Microsoft Office 2016 – более современный офисный продукт, все программы, входящие в него, и Excel, в том числе, улучшены и доработаны.

Чем открыть XLS в Windows 7

Microsoft Office 2007 — стандартный и наиболее часто используемый пакет, позволяющий просмотр и редактирование файла XLS в Windows 7.

Какие еще могут быть проблемы с файлом XLS

Файл не получится открыть, если он поврежден.

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

Источник

Понравилась статья? Поделить с друзьями:
  • Vba excel определить количество листов
  • Vba excel определить значение ячейки
  • Vba excel определить диапазон таблицы
  • Vba excel определение типа данных
  • Vba excel открыть лист по названию