powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
9 сообщений из 9, страница 1 из 1
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
    #39961369
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, пишу макрос в 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
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
    #39961641
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего этот код просто не работает, возвращает ошибку 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
VBA EXCEL. Как отследить зависшую открытую книгу в процессах системы?
    #39961667
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТак вот как с помощью макроса выяснить
скорее всего, ошибка не там, где вы её ищите
Эксель у вас висит, скорее всего, не потому что вы книгу там не закрыли, а потому,
у вас xlAp с глобальной областью видимости, и вы ee не освобождаете после использования.

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

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

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

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

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






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


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



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

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

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

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

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


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