Проверка файла - открыт или нет. КАК?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Обсуждение использование тега CODE перенесено в отдельную тему
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

2) Наверное стоит уточнить, что подразумевался код не содержащий функций WinApi и т.п. так как они не являются частью VBA (хотя и могут быть использованы)
ОК! Можно и чисто бейсиком обойтись... и идею оставить без изменений.

Код: Выделить всё

Function IsOpenable(AFile As String) As Long
  FN = FreeFile
  On Error Resume Next
  Open AFile For Input Access Read Lock Read Write As #FN
  IsOpenable = Err.Number
  Close #FN
End Function

Sub Macro1()
  Select Case IsOpenable("C:\1\111.xls")
    Case 70: MsgBox "Уже открыт"
    Case 53, 76: MsgBox "Не открыт, так как такого файла (пути) нет"
    Case 0: MsgBox "Не открыт никем для записи. Можно открывать"
    Case Else: MsgBox "Нельзя открывать по прочим причинам"
  End Select
End Sub
Функция IsOpenable проверяет файл на, если так можно выразиться, окрывабельность в исключительном режиме доступа. Относится к любым типам файлов. Работает в любых перечисленных ранее условиях.
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Уважаемый Naeel Maqsudov
Признать опубликованный Вами код идеальным назвать пока нельзя, так как в нём присутствует полное имя файла. А исходя из Ваших же постулатов, что надо учитывать все возможные нюансы, вероятность неизвестного месторасположение файла весьма велика. Так что наша дружеская беседа имеет реальный шанс на продолжение …
P.S. PLS, не цитируйте меня, ибо цитирование это удел только великих людей.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Не, ну я могу сюда добавить конечно и такой вариант который еще и по папкам ходит рекурсивно. Но целесообразность этого не очевидна... А скорее очевидна нецелесообразность :) . Если мы проверяем не занят ли кем-нибудь некий файл, то нам всегда известно что это за файл. (На практике ниразу ни сталкивался с обратным.) Проверка нужна для того, чтобы что-то с этим файлом сделать. Это подразумевает, что файл мы уже нашли (или имели к нему путь (полный или относительный)).

Так, IsOpenable("111.xls") - это тоже допустивый вызов.
Ответить