Sub ПроверкаКниги() If IsOpen("http://adress/DocLib1/ОбщаяКнига1.xls") Then ' так не работает 'If IsOpen("ОбщаяКнига1.xls") Then - и так тоже не работает MsgBox "Книга открыта другим пользователем." Else MsgBox "Книга доступна." End If End Sub
Function IsOpen(FileName As String) As Boolean Dim wb As Workbook For Each wb In Application.Workbooks If UCase(wb.Name) = UCase(FileName) Then IsOpen = True Exit Function End If Next wb IsOpen = False End Function
[/vba]
Помогите, пожалуйста
Добрый день! Уважаемые форумчане! Есть книга .xls которая размещена на рабочей локалке (SharePoint) Работа в книге ведется несколькими пользователями.
Имеется следующая задача, определить средствами VBA открыт ли этот файл другим пользователем.
Sub ПроверкаКниги() If IsOpen("http://adress/DocLib1/ОбщаяКнига1.xls") Then ' так не работает 'If IsOpen("ОбщаяКнига1.xls") Then - и так тоже не работает MsgBox "Книга открыта другим пользователем." Else MsgBox "Книга доступна." End If End Sub
Function IsOpen(FileName As String) As Boolean Dim wb As Workbook For Each wb In Application.Workbooks If UCase(wb.Name) = UCase(FileName) Then IsOpen = True Exit Function End If Next wb IsOpen = False End Function
А разве при открытии файла (если он уже кем то открыт) не предлагается открытие в режиме "ТОЛЬКО ЧТЕНИЕ" ??? (конечно если в файле не открыт общий доступ).
А разве при открытии файла (если он уже кем то открыт) не предлагается открытие в режиме "ТОЛЬКО ЧТЕНИЕ" ??? (конечно если в файле не открыт общий доступ).DJ_Marker_MC
Код в модуль книги ОбщаяКнига1.xls Вам остается только файлик прочитать S.txt и определить статус книги. Проверил у себя в сети,все работает правильно.
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) F$ = Me.Path & "\S.txt" Open F$ For Output As #1 Print #1, "Close" Close #1 End Sub
Private Sub Workbook_Open() F$ = Me.Path & "\S.txt" Open F$ For Output As #1 Print #1, "Open" Close #1 End Sub
[/vba]
Код в модуль книги ОбщаяКнига1.xls Вам остается только файлик прочитать S.txt и определить статус книги. Проверил у себя в сети,все работает правильно.
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) F$ = Me.Path & "\S.txt" Open F$ For Output As #1 Print #1, "Close" Close #1 End Sub
Private Sub Workbook_Open() F$ = Me.Path & "\S.txt" Open F$ For Output As #1 Print #1, "Open" Close #1 End Sub
Sub auto_open() Sheets(1).[z1] = "Занят" ActiveWorkbook.Save End Sub Sub auto_close() Sheets(1).[z1] = "Свободен" ActiveWorkbook.Save End Sub
[/vba]
Пришлось создать файл indikator.xls (в ячейке A1 ссылка на значение Z1 Общей книги)
[vba]
Код
Sub Проверка() Workbooks.Open Filename:="http://.../indikator.xls", UpdateLinks:=3 Dim kontroller As String kontroller = Sheets(1).[a1].Value Workbooks("indikator.xls").Close False If kontroller = "Занят" Then MsgBox "Журнал регистрации ЗАНЯТ (открыт другим пользователем)!" Else MsgBox "Журнал регистрации ДОСТУПЕН !" End If End Sub
[/vba]
doober, Спасибо У меня получилось не так изящно
Код в Общей книге: [vba]
Код
Sub auto_open() Sheets(1).[z1] = "Занят" ActiveWorkbook.Save End Sub Sub auto_close() Sheets(1).[z1] = "Свободен" ActiveWorkbook.Save End Sub
[/vba]
Пришлось создать файл indikator.xls (в ячейке A1 ссылка на значение Z1 Общей книги)
[vba]
Код
Sub Проверка() Workbooks.Open Filename:="http://.../indikator.xls", UpdateLinks:=3 Dim kontroller As String kontroller = Sheets(1).[a1].Value Workbooks("indikator.xls").Close False If kontroller = "Занят" Then MsgBox "Журнал регистрации ЗАНЯТ (открыт другим пользователем)!" Else MsgBox "Журнал регистрации ДОСТУПЕН !" End If End Sub
У меня такая проблема не возникает. Возможно не правильно получаете статус книги ActiveWorkbook.Save-вы уверены на 100%,что в этот момент активная книга та, на которую вы расчитываете. Проверте правильность пути к книге,проанализируйте код в общей книга. И перейдите на текстовик,так проще и надежнее Видео здесь
У меня такая проблема не возникает. Возможно не правильно получаете статус книги ActiveWorkbook.Save-вы уверены на 100%,что в этот момент активная книга та, на которую вы расчитываете. Проверте правильность пути к книге,проанализируйте код в общей книга. И перейдите на текстовик,так проще и надежнее Видео здесьdoober
Сообщение отредактировал doober - Понедельник, 24.03.2014, 15:06
Да да использую именно ваш метод указанный выше [vba]
Код
Private Sub Workbook_Open() F$ = Me.Path & "\S.txt" Open F$ For Output As #1 Print #1, "Open" Close #1 End Sub
[/vba] Путь указан верно, общая книга открывается вручную без проблем При открытии Обшей книги макросом (для внесения изменений программно) возникает ошибка
Да да использую именно ваш метод указанный выше [vba]
Код
Private Sub Workbook_Open() F$ = Me.Path & "\S.txt" Open F$ For Output As #1 Print #1, "Open" Close #1 End Sub
[/vba] Путь указан верно, общая книга открывается вручную без проблем При открытии Обшей книги макросом (для внесения изменений программно) возникает ошибкаВалерьянка
У меня такая функция в заначке лежит (автора, к сожалению, не помню):[vba]
Код
Function FileIsBusy(File$) As Boolean ' не открывая файла проверяет, открыт ли он вообще кем-либо Dim FN%: FN = FreeFile On Error Resume Next Open File For Random Access Write Lock Write As #FN Close #FN FileIsBusy = (Err <> 0) End Function
[/vba]
У меня такая функция в заначке лежит (автора, к сожалению, не помню):[vba]
Код
Function FileIsBusy(File$) As Boolean ' не открывая файла проверяет, открыт ли он вообще кем-либо Dim FN%: FN = FreeFile On Error Resume Next Open File For Random Access Write Lock Write As #FN Close #FN FileIsBusy = (Err <> 0) End Function