Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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
Может попробовать поиграться вот так (программно отключается автозапуск событий) ?
  1. iFullName = "D:\Test.xls"
  2. With Application
  3.   .EnableEvents = False
  4.   .Workbooks.Open FileName:=iFullName
  5.   .EnableEvents = True
  6. End With

Ответить

Номер ответа: 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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #8
Добавлено: 19.12.08 13:09
В винде это делает команда net file (в консоли). Она выдает таблицу вида

  1. Код         Путь                           Пользователь          #
  2. блокировок
  3. -------------------------------------------------------------------------------
  4. 1303       \PIPE\spoolss                           IVANOV                0    
  5. 1899       \PIPE\spoolss                           RESERV$               0    
  6. 2207       \PIPE\spoolss                           SOLOVEV               0    
  7. 2359       C:\                                     SOLOVEV               0    
  8. 2371       C:\nfo_2008.12.xls                      SOLOVEV               3    


Эту инфу можно получить в файл так: "cmd net file > c:\net_file.txt" в API ShellExecute, потом прочитать файл и пропарсить его - так ты можешь узнать имя пользователя. Это работает при выполнении кода на том же компьютере, где лежит файл, иначе не сделать. Т.е. гостевой компьютер этого напрямую никогда не узнает, для этого нужна типа "серверная" часть для обмена информацией пользователей Excel.

Ответить

Номер ответа: 9
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #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()
   ;Dim 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.
      ;Documents.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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам