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

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

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

Laidi
Сообщения: 7
Зарегистрирован: 22 фев 2005, 19:43

Уважаемые специалисты, помогите, пожалуйста. У меня есть файл LADU.xls, который надо проверить из файла 1.xls открыт ли LADU.xls или нет. Я пробовала нижеприведенную процедуру, но она работает, только если файл LADU.xls открыт :-(

Sub Macro1()
If Windows("LADU.xls").Activate Then
MsgBox "OK!"
Else
MsgBox "NO!"
End If
End Sub

Спасибо!
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Можно попробовать что-то типа этого :

Sub Macro1()

On Error GoTo ErrNumbers

Workbooks("LADU.xls").Activate: MsgBox "OK!", , ""

ErrNumbers: If Err.Number = 9 Then MsgBox "NO!", , ""

End Sub

Sub Macro2()

For Each iBook In Workbooks

If iBook.Name = "LADU.xls" Then
MsgBox "OK!", , "": Exit Sub
End If

Next

MsgBox "NO!", , ""

End Sub
Laidi
Сообщения: 7
Зарегистрирован: 22 фев 2005, 19:43

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

pashulka, используйте теги CODE при пудбикации исходного кода в форуме.

Теперь по существу:

Приведенные выше методы (оба) ориентированы только на текущий экземпляр Excel. Они не будут правильно работать если запущено несколько экземпляров Excel, а также если файл открыт, например, на другой рабочей станции (по сети).

Для чего нужно определять открыт ли файл?

Если для того, чтобы потом открыть, то лучше не заморачиваться с этим вовсе. Т.е. просто открывать, но обработать ошибку, если она возникнет. (см On Error)

Если же для чего-то другого, то... незнаю, пишите... Обязательно найдем лучшее решение :)
Laidi
Сообщения: 7
Зарегистрирован: 22 фев 2005, 19:43

Спасибо, других решений не надо. Это именно тот вариан, который требовался. Я не программист, пишу для себя, чтоб чуть облегчить работу. Знаю очень мало, стараюсь использовать те процедуры, которые в состоянии понять. :-) А Вы не подскажите можно ли сделать так, чтобы файл с линками в другие файлы (все у одного пользователя на одном компе), каждый раз при открывании не спрашивал Update или нет, а делал Update ВСЕГДА и без лишних вопросов? Что-то я в хелпе этого не нашла... :-(
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

To Naeel Maqsudov

Использование html тэгов есть обязательное условие участия в форуме или нет ?

P.S. И хотелось бы увидеть Ваш идеальный код, который будет работать при любых условиях.
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

To Laidi

В меню Сервис выберите команду Параметры, далее выберите закладку Правка. Затем уберите "флажок" напротив текста Запрашивать об обновлении автоматических связей и нажмите кнопку ОК.

Примечание : После этого при открытии рабочей книги запрос выдаваться не будет, хотя данные будут обновляться.
Laidi
Сообщения: 7
Зарегистрирован: 22 фев 2005, 19:43

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

Использование html тэгов есть обязательное условие участия в форуме или нет ?
Весьма желательно, когда публикуется не 1-2 строчки, а целая структура с операторными скобками.
И хотелось бы увидеть Ваш идеальный код, который будет работать при любых условиях.
Идея такова: используя функции WinAPI открываем файл для записи. Если он открылся, то освобождаем Handle и делаем заключение, что файл свободен. Если он не открылся, то анализируем код ошибки. Если это Sharing violation, то значит файл чем-то открыт (может быть даже не Excel-ем), и трогать его нельзя. Если нужно, могу написать и опубликовать здесь мой идеальный код. :-P
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

To Naeel Maqsudov

1) Нельзя ли ответить на мой вопрос более точно, а то Ваш ответ очень "размыт", и не содержит чёткого ответа. А вопрос относится именно к той категории, где возможен ответ в виде Да/Нет.

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