Страница: 1 |
Страница: 1 |
Вопрос: Как проверить не открыт ли файл на другой машине
Добавлено: 16.12.08 09:33
Автор вопроса: alfred
Как проверить не открыт ли файл на другой машине?
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #1
Добавлено: 16.12.08 09:56
http://www.vbnet.ru/forum/show.aspx?id=173030
Номер ответа: 2
Автор ответа:
KiZ
Вопросов: 27
Ответов: 68
Профиль | | #2
Добавлено: 16.12.08 13:05
А у меня паралельно вопросик, если макрос находится в том файле, который пытаются открытьвторой раз на другой машине?
Номер ответа: 3
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #3
Добавлено: 16.12.08 19:10
А что с макросом ?
Номер ответа: 4
Автор ответа:
KiZ
Вопросов: 27
Ответов: 68
Профиль | | #4
Добавлено: 17.12.08 11:41
Честно говоря в этом случае я не понял куда его пихать. потомучто он сначала говорит, что файл занят другим пользователем, а только потом выполняет workbook_open
Номер ответа: 5
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #5
Добавлено: 18.12.08 08:59
Может попробовать поиграться вот так (программно отключается автозапуск событий) ?
Номер ответа: 6
Автор ответа:
KiZ
Вопросов: 27
Ответов: 68
Профиль | | #6
Добавлено: 18.12.08 13:24
хм... неа. Может вопрос не правильно сформулировал. Вот в идеале как было бы здорово, если бы))
Открываешь файл, он тебе дает уведомление у кого он открыт. Причины почему нельзя сделать это в Воркбук_опен. Потому что сначало появляется уведомление, о содержании макросов.(Нажимаешь разрешить). Потом он говорит, что файл занят другим пользователем. Причем, если версия экселя у него не зарегина, то он пишет просто unknown. А потом только запускает макрос.
А допустим, что сообщение о занятости файла оставим. Как мне узнать РЕАЛЬНО у кого открыт файл. Ну т.е. если юзать
Environ$("username", то он указывает твоего юзверя(( а как мне того юзверя узнать?? .... Запутанно наверное изложил...
Номер ответа: 7
Автор ответа:
KiZ
Вопросов: 27
Ответов: 68
Профиль | | #7
Добавлено: 18.12.08 13:24
Причем сам файл. Т.е. макрос должен в нем находится.
Номер ответа: 8
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #8
Добавлено: 19.12.08 13:09
В винде это делает команда net file (в консоли). Она выдает таблицу вида
Эту инфу можно получить в файл так: "cmd net file > c:\net_file.txt" в API ShellExecute, потом прочитать файл и пропарсить его - так ты можешь узнать имя пользователя. Это работает при выполнении кода на том же компьютере, где лежит файл, иначе не сделать. Т.е. гостевой компьютер этого напрямую никогда не узнает, для этого нужна типа "серверная" часть для обмена информацией пользователей Excel.
Номер ответа: 9
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #9
Добавлено: 19.12.08 15:26
NetFileEnum
Номер ответа: 10
Автор ответа:
Антон
Вопросов: 0
Ответов: 2
Профиль | | #10
Добавлено: 24.10.11 22:03
Хороший пример от разработчиков:
http://support.microsoft.com/kb/209189/ru
Номер ответа: 11
Автор ответа:
Антон
Вопросов: 0
Ответов: 2
Профиль | | #11
Добавлено: 24.10.11 22:05
На всякий случай продублирую:
(c) Microsoft - http://support.microsoft.com/kb/209189/ru
Sub YourMacro()
 im strFileName As String
' Full path and name of file.
strFileName = "C:\test.doc"
' Call function to test file lock.
If Not FileLocked(strFileName) Then
' If the function returns False, open the document.
 ocuments.Open strFileName
End If
End Sub
Function FileLocked(strFileName As String) As Boolean
On Error Resume Next
' If the file is already opened by another process,
' and the specified type of access is not allowed,
' the Open operation fails and an error occurs.
Open strFileName For Binary Access Read Write Lock Read Write As #1
Close #1
' If an error occurs, the document is currently open.
If Err.Number <> 0 Then
' Display the error number and description.
MsgBox "Error #" & Str(Err.Number) & " - " & Err.Description
FileLocked = True
Err.Clear
End If
End Function