Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: kill не всегда срабатывает
 
 автор: ludmil   (04.07.2010 в 16:46)   личное сообщение
 
 

Вот кусок кода : хочу удалить файл после работы пользователей (его измняют и только печатают или сохраняют со своими именами).Не срабатывает так как процесс GetActiveWindow и переход к опросу dir идут параллельно .Если задерживаю работу в отладке - то все хорошо.Как запретить переход к следующему оператору за GETActive....
Или что-то делаю не так ...
str_pr = "Excel.exe " & imf
retval = Shell(str_pr, 1)

Call GetActiveWindow

If Dir(imf) <> "" Then

Kill imf
End If
If Dir(imf) = "" Then
MsgBox (imf & "удален ")
Else
MsgBox (imf & "не был закрыт Excel и файл придется удалять вручную")
End If
End If
Exit Sub

  Ответить  
 
 автор: час   (04.07.2010 в 22:18)   личное сообщение
 
 

можно попробовать - схитрить

Call GetActiveWindow

MsgBox"Техническое удаление...."

If Dir(imf) <> "" Then

Kill imf
End If
If Dir(imf) = "" Then
MsgBox (imf & "удален ")
Else
MsgBox (imf & "не был закрыт Excel и файл придется удалять вручную")
End If
End If
Exit Sub

  Ответить  
 
 автор: ludmil   (04.07.2010 в 22:59)   личное сообщение
 
 

Это срабатывает для случаев когда они нормально выходят закрывая excel и файл а если переключаются то проскакивает так как файл оказывается захваченным.Хорошо бы его предварительно закрыть (проверив закрыт ли ) и после этого удалять.И еще вопрос а как закрыть GetActiveWindows т.е. процесс в данном случае EXcel .Порядок закрытий
-сначала проверить закрыт ли файл и Excel
-закрыть файл если открыт
-закрыть excel если открыт

Все понимаю но не знаю команд
Спасибо первый вариант получился Хочется чуть побольше...

  Ответить  
 
 автор: Гоблин   (04.07.2010 в 23:13)   личное сообщение
 
 

Далек от мысли подсказать что-то дельное, но если это екселевский файл, то зачем проверять файл на его открытие? Если он открыт, то открыт и ексель. Тогда просто закрыть ексель и все тут.

  Ответить  
 
 автор: час   (04.07.2010 в 23:18)   личное сообщение
 
 

Дык он программно всё делает , а не визуально - понял?

  Ответить  
 
 автор: Гоблин   (04.07.2010 в 23:26)   личное сообщение
 
 

Не совсем, но мне не впервой.
Дерево, понимаешь ли.

  Ответить  
 
 автор: ludmil   (05.07.2010 в 00:17)   личное сообщение
 
 

получился окончательно вариант вылавливающий ошибу 53 -файл захвачен(открыт кем-то)

str_pr = "Excel.exe " & imf
str_pr = "Excel.exe " & imf
retval = Shell(str_pr, 1)
Call GetActiveWindow

MsgBox "техническое удаление" задерживает процесс и позволяет удалить если закрыли

If Dir(imf) <> "" Then
On Error GoTo err_53
Kill imf
MsgBox (imf & "удален.")
End If

End If
Exit Sub
err_53:
MsgBox (удалить невозможно т.к. файл открыт.")
Спасибо Удачи всем

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList