Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы? / 9 сообщений из 9, страница 1 из 1
24.05.2020, 17:27
    #39961369
Bobax012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
Добрый день, пишу макрос в Excel который открывает книгу
Код: vbnet
1.
Set xlWb = xlAp.Workbooks.Open(ThisWorkbook.Path &  "\Книга.xlsx")



Сам процесс открытия скрыт от пользователя, т.е. невидно, что она открывается.
Бывает, что открытая книга зависает в процессах, а при повторном прогоне программы пишет, что уже открыта "Открыть для чтения".
Так вот как с помощью макроса выяснить, что книга висит в процессах и при повторной попытке открыть её она принудительно закрыла бы эту "зависшую" книгу и затем снов открыла?

Находил множество примеров в сети, вот например, но не помогает. Так и висит процесс:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Function CheckWorksheet(strName As String) As Boolean
 
   On Error Resume Next
   Dim pExcel As Excel.Application
   'Получаем объект
   Set pExcel = GetObject(class:="Excel.Application")
 
   If Not pExcel Is Nothing Then
      Dim wb As Workbook
 
      'Проверяем наличие открытой книги
      Set wb = pExcel.Workbooks(strName)
      If Not wb Is Nothing Then
         CheckWorksheet = True
      Else
         CheckWorksheet = False
      End If
      Exit Function
   End If
   CheckWorksheet = False

End Function




В этом примере показано как отследить, что указанная книга открыта. Так вот у меня она указывает, что закрыта.
Помогите.
...
Рейтинг: 0 / 0
25.05.2020, 12:30
    #39961641
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
Скорее всего этот код просто не работает, возвращает ошибку GetObject. Эксель же висит.
И лучше так переписать:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function CheckWorksheet(strName As String) As Boolean
Dim pExcel As Excel.Application

   On Error Resume Next
   'Получаем объект
   Set pExcel = GetObject(class:="Excel.Application")
 
   If pExcel Is Nothing Then Exit Function

   Dim wb As Workbook
   CheckWorksheet = pExcel.Workbooks(strName) Is Nothing
End Function
...
Рейтинг: 0 / 0
25.05.2020, 13:24
    #39961667
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
авторТак вот как с помощью макроса выяснить
скорее всего, ошибка не там, где вы её ищите
Эксель у вас висит, скорее всего, не потому что вы книгу там не закрыли, а потому,
у вас xlAp с глобальной областью видимости, и вы ee не освобождаете после использования.

Да еще, почти наверно, где-нибудь от него quit требуете.

Ошибка обсуждалась в трех форумах бессчётное количества раз.
Не найти можно, только если совсем не понимать, что видишь перед глазами.
И всякий раз вопрошающий обязательно обыскал весь интернет, но ничего не нашёл.
...
Рейтинг: 0 / 0
25.05.2020, 19:32
    #39961868
Bobax012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
booby,

Для чего был этот посыл? Я не школьник, которому нужно решить задачку на экзамен, я сам её решаю и есть только эта проблема.
Если есть, что подсказать, если вы знаете, где искать, дайте ссылку, а так спасибо конечно, но бесполезно.

Ребят, не вы обиду, только пишите по делу, а-то я заметил тут любят по умничать, мол не там искал, не там смотрел. Если Вы умные - направьте помогите другим. Простите, психанул.
...
Рейтинг: 0 / 0
25.05.2020, 21:04
    #39961883
Dino_zavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
Пробуй так

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Function CheckWorksheet(strName As String) As Boolean
 
   Dim pExcel As Excel.Application
   Dim wb As Workbook
   'Получаем объект
   Set pExcel = GetObject(class:="Excel.Application")
 
   If Not pExcel Is Nothing Then
      '  ищем книгу
      For Each wb In pExcel.Workbooks
           If wb.Path & "\" & wb.Name = strName Then
                wb.Close ' закрываем книгу
                MsgBox "открытая книга : ''" & strName & "'' обнаружена и закрыта"
                CheckWorksheet = True
                Exit Function
           End If
      Next
      MsgBox "открытая книга : ''" & strName & "'' не обнаружена"
   End If

End Function
...
Рейтинг: 0 / 0
25.05.2020, 21:17
    #39961886
Dino_zavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
Bobax012
Добрый день, пишу макрос в Excel который открывает книгу
Код: vbnet
1.
Set xlWb = xlAp.Workbooks.Open(ThisWorkbook.Path &  "\Книга.xlsx")






Bobax012
Бывает, что открытая книга зависает в процессах.....


ну и в принципе после скрытого открытия нужно книгу и закрыть чтобы таких ситуаций не возникало
...
Рейтинг: 0 / 0
26.05.2020, 05:05
    #39961974
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
Bobax012
... психанул.



... лучше бы внимательно вчитывалась, в то, что тебе пишут.

https://yandex.ru/search/?clid=2186620&text=excel automation fails second time code runs&lr=213&redircnt=1590458490.1
...
Рейтинг: 0 / 0
26.05.2020, 06:27
    #39961980
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
Bobax012
...есть только эта проблема.

"эта" - это какая?
может быть ты чего-то подобного не можешь найти:
https://stackoverflow.com/questions/30363748/having-multiple-excel-instances-launched-how-can-i-get-the-application-object-f

Однако, если "эта" проблема возникает в результате внутренней ошибки в Excel, вызываемой твоим кодом,
не факт, что сможешь закрыть ту книгу, даже если найдёшь.

И в любом случае, ты преследуешь цель, которая не выглядит разумной в первоначальной озвучке.
По минимуму - тебе нужно принудительно гасить процесс.
По максимуму - разбираться с источниками "иногда зависания".
...
Рейтинг: 0 / 0
26.05.2020, 13:08
    #39962180
ldfanate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
авторСам процесс открытия скрыт от пользователя, т.е. невидно, что она открывается.
Наверное гдето тут источник всех проблем. Что за бизнес-процесс такой, что от пользователя надо прятать открываемую книгу?
От опытных и любопытных пользователей (особенно если они клавишей Alt+F11 умеют работать) такая "криптография" всёравно не спасает. Больше проблем в сопровождении, чем реальной пользы.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]