Страницы: 1
RSS
как узнать - кто уже открыл файл до меня?
 
Добрый день.  
 
В макросе открываю книгу для записи в неё. Проверяю, что она открыта для записи. А вот если в ней уже кто-то работает, то мне надо узнать имя компа и имя пользователя того, кто уже в ней.  
Подскажите, плз, есть ли какой-нибудь способ узнать это VBA?
 
Стасон, я набрал в окошке поиска почти целиком Ваш запрос: как узнать - кто уже открыл файл. Не поверите - тема обсуждалась, есть решения. Вам ссылки скопировать сюда или лучше на почтовый ящик?
 
{quote}{login=Юрий М}{date=29.10.2009 11:25}{thema=}{post}Стасон, я набрал в окошке поиска почти целиком Ваш запрос: как узнать - кто уже открыл файл. Не поверите - тема обсуждалась, есть решения. Вам ссылки скопировать сюда или лучше на почтовый ящик?{/post}{/quote}  
 
Юрий, спасибо за содержательный ответ. Я не поверил - проверил ещё раз в поиске. Действительно есть похожие тему. Решений - нет. Может быть дело в том, что я не совсем корректно задал вопрос? Попробую ещё раз.  
 
Можно ли средствами VBA узнать сетевое имя компьютера, с которого открыли "для записи" файл, который я открыл позже "только для чтения"?
 
Стасон, в своё время ZVI показывал, как узнать кто открыл файл даже только для просмотра. Где эта тема - не знаю. И что это за ирония - "содержательный ответ"?
 
ну насчет корявости поиска тоже много обсуждалось, найти что то крайне трудно, надо сидеть и вспоминать фразу которая точно была в данном топике, иначе - никак.  
 
Так что посылать в поиск не совсем корректно, тем паче если и сами найти на могли)
 
{quote}{login=Юрий М}{date=29.10.2009 12:54}{thema=}{post}Стасон, в своё время ZVI показывал, как узнать кто открыл файл даже только для просмотра. Где эта тема - не знаю. И что это за ирония - "содержательный ответ"?{/post}{/quote}  
 
Юрий, ирония моя достаточно добродушная. Не обижайтесь. А её природа в том, что, для просвещённого человека в како-либо области, имхо, проще сразу подсказать по существу вопроса, чем отправлять не солоно хлебавши без малейшего намёка. Поверьте - я не ленивый человек, но можно же мне помочь съэкономить массу времени.
 
{quote}{login=}{date=29.10.2009 12:49}{thema=Re: }{post}  
Можно ли средствами VBA узнать сетевое имя компьютера, с которого открыли "для записи" файл, который я открыл позже "только для чтения"?{/post}{/quote}  
 
Хотелось бы получить ответ гуру по существу вопроса. В какой области хелпа по Экселю мне хотя бы искать?
 
.UserStatus именно с общей книгой работает.  
А вот если книга открыта в монопольный доступ и ReadOnly - эксель на строку .UserStatus ругается.  
Юрий, я тоже не смог найти. Дайте хотя бы текст запроса, который Вы вводили яндексу.
Bite my shiny metal ass!      
 
А я пользуюсь во всех книгах следующим макросом. Реально не раз выручал, когда пользователь говорит "не я", а я ему показываю что всетаки он.  
Отображает в листе "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
 
Я уже и сам с прискорбием понял, что .UserStatus только с общими книгами работает. У меня случай с книгой не общей.  
Дело в том, что строгой политики по именам пользователей на фирме нет, а вот имена компьютеров известны. Была идея, при открытии файла, в случае если он открылся "только для чтения" - определить комп с которого его смотрят. Дальше уже можно набрать местный номер и выгнать гада из книги.  
 
to Prist: спасибо, мне все примеры в пользу. Когда-нибудь пригодится...  
 
to angelrr: лог не подходит, ибо если книга свободна, то уже не важно кто там был. Но, всё равно спасибо, тоже возьму на заметку.
 
я бы сделал так,    
при открытии книги данные о пользователе пишеться в лог, и книга сохраняется, если книга не может сохраниться то ничего не делать.  
 
НО человек может открыть файл без макросов, и тогда не узнаешь кто в нем сидит.
 
Я в таких случаях ставлю пароль на редактирование. Простой пароль, его все знают, но когда открывается книга и вылезает окошко ввода пароля задумываешься а зачем открыл книгу - если просто посмотреть, то и пароль не вводишь, а нажимаешь только для чтения. В результате книга свободна для записи, меньше вероятность внесения случайных изменений.  
Или другой вариант: Изменения в книгу вносятся только макросом, пароль записан в макросе, все открывают только для чтения.
Bite my shiny metal ass!      
 
Я так думаю, что на открытие книги поставлю макрос. Макрос будет в именованые константы записывать всё что мне нужно. А, при открытии, считывать данные буду из этих констант. Вот как-то так...  
 
Всем спасибо.
 
Стасон, записать в имена и сразу сохранять? Тоже метод. Еще возможно в WinAPI поковыряться, какая-то должна возвращать эту информацию.
Bite my shiny metal ass!      
 
То есть, узнать имя пользователя, открывшего не общую книгу нельзя?
Страницы: 1
Читают тему
Наверх