Страницы: 1
RSS
Как узнать: используется ли книга кем-нибудь в данный момент, ЕСЛИ ...
 
Уважаемые форумчане!  
В очередной раз обращаюсь за помощью.  
Есть некий код который из Книги1 открывает Книгу2, при этом системные сообщения о том, что файл уже кем-то используется и будет открыт только для чтения ИГНОРИРУЕТСЯ.    
С одной стороны это удобно, а с другой - появляется проблема: пользователь не знает сможет ли он сохранить изменения в данной Книге2 или нет и, как правило об этом узнает, нажав на кнопку сохранить и получив системный ответ о том, что "Файл открыт только для чтения".  
МОЖНО ЛИ сделать так, чтобы при открытии Книги2 в районе шапки таблицы имелся какой-нибудь индикатор, отображающий информацию либо цветом (красн, зел), либо словами (Сохранение разрешено, не разрешено) ... и КАК ???  
(образец прикреплю, если данный вопрос кого-то заинтересует)
 
http://www.planetaexcel.ru/forum.php?thread_id=21737 И ещё были подобные темы.
 
{quote}{login=Юрий М}{date=27.11.2010 06:40}{thema=}{post}http://www.planetaexcel.ru/forum.php?thread_id=21737 И ещё были подобные темы.{/post}{/quote}  
... огромное спасибо за помощь !!  
... с каждым днем все больше и больше начинаю разбираться с VBA.  
Перечитал и перепробовал все рекомендуемые вами темы и остановился на следующем:  
(код написан The Prist)  
Sub Get_UserStatus_Info()  
Dim asUsers, sUserName As String, sDateTime As String, sStatus As String  
Dim li As Long  
asUsers = Workbooks("Статистика2.xlsm").UserStatus  
For li = 1 To UBound(asUsers, 1)  
sUserName = sUserName & vbNewLine & asUsers(li, 1) & ";" & vbNewLine & "Время изменения файла: " & Format(asUsers(li, 2), "hh.mm") & vbNewLine & "Дата изменения файла: " & Format(asUsers(li, 2), "dd.mm.yyyy")  
' sDateTime = asUsers(li, 2)  
Select Case asUsers(li, 3)  
Case 1  
sStatus = "Монопольный"  
Case 2  
sStatus = "Общий"  
End Select  
Next  
MsgBox "Пользователи файла:" & sUserName & vbNewLine & "Доступ к файлу - " & sStatus  
End Sub  
 
К сожалению в данный момент не могу опробовать работу данного кода с сетевыми файлами, придется ждать понедельника.  
А пока для меня не понятным остается следующее:  
мне ясно что код при открытии книги показывает кто и когда вносил изменения, а также демонстрирует вид доступа "монопольный" или "общий", но больше меня интересует следующее: показывает ли он то, что кто-то в данный момент уже работает с этим файлом ???  
И второй вопрос, можно ли заменить Msgbox на како-нибудь другой индикатор, который бы на протяжении всего времени работы с файлом показывал возможно ли сохранение данных или нет.  
Например: выделение цветом ячейки с надписью "Возможно" - зеленый, "не возможно" - красный ???
 
в топике "Определение статуса файла (открыт ли)" ( http://www.planetaexcel.ru/forum.php?thread_id=21737 ) ZVI 26.11.2010 в 06:39 предложил отлично работающую формулу для решения этой проблемы.  
Проверка, открыт ли файл эксклюзивно кем-нибудь без загрузки файла в Excel:  
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  
 
Sub Test()  
Debug.Print IsOpen("C:\Test.xls")  
End Sub  
 
В пятницу проверял на работе на расшаренных файлах на сервере.  
Отлично определяет, можно в файл писать или нет.  
Если сетевой файл открыт кем-то монопольно, то функция возвращает TRUE, т.е. файл уже кем-то открыт и доступ к нему возможен только на чтение.  
А если файлу дать общий доступ, а потом его кто-то откроет, то - FALSE. Оно и правильно. Ведь в общем доступе запись возможна.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Наверх