Страницы: 1
RSS
Закрытие в VBA нового окна Excel
 
Добрый день, уважаемые знатоки!

Прошу помощи, т.к. в существующих темах и прочих ресурсах решения найти не удалось.

Есть макрос, который массово выкачивает из SAP Excel-файлы, сохраняет их и оставляет открытыми каждый в новом окне.
При попытке их закрытия остаются висеть все серые пустые окна Excel

Закрыть пытаемся этой частью кода:
Код
For i = 2 To RowQty
Dim Wb As Object, filepath As String, file As String
file = filepath & "frc" & Col3 & " WK " & WkNumber & ".xap" 

Set Wb = GetObject(file)
Wb.Close False

Next i
Application.quit не помогает, т.к. закрывает все файлы - нужные и ненужные.
Прошу подсказать способ избавиться от серых пустых окон.

Спасибо!
 
aNewUser, здравствуйте
Попробуйте Windows().Close
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, спасибо, но не работает. Отказывается "видеть" эти окна и выдаёт ошибку Subscript out of range
 
, а дайте полный макрос глянуть)
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
написал:
Отказывается "видеть" эти окна
для начала расскажите и покажите как Вы эти окна открываете, что их закрывать приходится отдельно от открытия. Судя по скрину - для каждого файла создается новый экземпляр Excel.
Потому что вот эта строка:
Цитата
написал:
Set Wb = GetObject(file)
совершенно не обязательно будет обращаться к уже открытому ранее файлу, если он открыт в другом экземпляре Excel. GetObject всегда обращается лишь к последнему открытому экземпляру. И если не найдет там этот файл - откроет его заново, а потом по сути и закроет...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Можно попробовать после своего кода добавить следующий
Код
For i = 1 To Windows.Count
If Windows(i).Visible Then Exit For
Next
If i = Windows.Count + 1 Then
Application.Quit
End If
 
tolikt, Спасибо, но такой способ уже безуспешно испытан

Цитата
для начала расскажите и покажите как Вы эти окна открываете, что их закрывать приходится отдельно от открытия.
Цитата
а дайте полный макрос глянуть)
Дмитрий(The_Prist) Щербаков, файлы выгружаются из САПа (макрос задуман для того, чтобы они автоматически выгружались)
Mershik,

полный макрос (содержит много лишнего из САПа).
Код
Sub ()
Application.ScreenUpdating = False
    Dim SapGuiAuto As Object
    Dim SAPApp As Object
    Dim SAPCon As Object
    Dim session As Object
    Set SapGuiAuto = GetObject("SAPGUI")
    Set SAPApp = SapGuiAuto.GetScriptingEngine
    Set SAPCon = SAPApp.Children(0)
    Set session = SAPCon.Children.ElementAt(0) 
Dim col1 As Range, col2 As Range, Col3 As Range, col4 As Range, col5 As Range, col6 As Range, col7 As Range, i As Long
Dim objSheet As Worksheet, RowQty As Long, WkNumber As Long

WkNumber = DatePart("ww", Now, vbMonday, vbFirstFullWeek)
Set objSheet = ThisWorkbook.Worksheets("VN")
RowQty = objSheet.Range("B1").End(xlDown).Row 

For i = 2 To RowQty
Set col1 = objSheet.Cells(i, 1) 
Set col2 = objSheet.Cells(i, 2) 
Set Col3 = objSheet.Cells(i, 3) 
Set col4 = objSheet.Cells(i, 4) 
Set col5 = objSheet.Cells(i, 5) 
Set col6 = objSheet.Cells(i, 6) 
Set col7 = objSheet.Cells(i, 7) 

session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "tcode"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtP_WERKS").Text = col1 
session.findById("wnd[0]/usr/ctxtS_LIFNR-LOW").Text = col2 
session.findById("wnd[0]/usr/txtTAGE").Text = col4 
session.findById("wnd[0]/usr/txtWOCHEN").Text = col5 
session.findById("wnd[0]/usr/txtMONATE").Text = "" 
session.findById("wnd[0]/usr/txtF_DOW").Text = col6 & Col3 & " Wk " & WkNumber & ".xap" 
session.findById("wnd[0]/usr/chkP_TEST").Selected = col7 
session.findById("wnd[0]/tbar[1]/btn[8]").press 

CreateObject("WScript.Shell").RegWrite "HKCU\Software\Microsoft\Office\" _
            & Val(Application.Version) & ".0" _
            & "\Excel\Security\ExtensionHardening", 0, "REG_DWORD"
Next i

Dim Wb As Object, filepath As String, file As String
filepath = "C:\Users\*...*\Desktop\"
file = filepath & "FRCT " & Col3 & " WK " & WkNumber & ".xap"
Set Wb = GetObject(file)
Wb.Close

Next i
End Sub
 
aNewUser, см. картинку
 
Можно попробовать после этой строки:
Код
CreateObject("WScript.Shell").RegWrite "HKCU\Software\Microsoft\Office\" _
& Val(Application.Version) & ".0" _
& "\Excel\Security\ExtensionHardening", 0, "REG_DWORD"

создать такую:

Код
Dim oExApp as object 'это лучше вынести за цикл
'а это все перед next i
set oExApp = GetObject(, "Excel.Application")
oExApp.Workbooks("FRCT " & Col3 & " WK " & WkNumber & ".xap").Close True
oExApp.Quit
а цикл "закрытия" книг убрать вовсе.
Изменено: Дмитрий(The_Prist) Щербаков - 08.11.2021 18:26:09
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,
Спасибо! Спотыкается на этой строке (та же Run-time), а потом пытается закрыть соседние файлы
Код
oExApp.Workbooks("FRCT " & Col3 & " WK " & WkNumber & ".xap").Close True
 
Рекомендую
 
Цитата
написал:
Спотыкается на этой строке (та же Run-time)
ошибку предлагаете угадать? :) Run-Time ошибок больше 1000. Файлы формата ".xap" точно открываются в Excel? Или только идет попытка их открытия? Вы видите их открытыми хоть на каком-то этапе?
Спрашиваю потому, что этот формат "не родной" для Excel и возможно, файлы эти даже не открываются, а просто запускается каждый раз новый процесс. Посмотрите после шага формирования одного файла как выглядит имя сформированной книги в Excel.
Изменено: Дмитрий(The_Prist) Щербаков - 09.11.2021 08:24:32
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,

Цитата
написал:
ошибку предлагаете угадать?
Сорри, была упомянута ранее: Run-time error 9, subsript out of range.
Цитата
написал:
Файлы формата ".xap" точно открываются в Excel? Или только идет попытка их открытия? Вы видите их открытыми хоть на каком-то этапе?
Файлы по умолчанию успешно открываются в Excel (даже если не указывать расширение .xap, САП их открывает Экселем). Перед попыткой закрытия они видны и юзабельны.
Имена сформированных книг такие, как задаёт макрос (с номером недели и проч), с расширением .xap или без него.

Указанный выше код закрывает 6 из 6 открытых файлов (например), и часть серых окон (4 из 6, а два остаются висеть).
 
Цитата
написал:
Рекомендую
Спасибо, но результат использования кода от г-на Торнтона примерно такой же: закрылись 4 из 6 окон, два остались висеть.
 
Цитата
aNewUser написал:
subsript out of range
Для этого файл с макросами увидеть нужно (хрен его знает, что там за Range в Вашем файле и как он и из чего был создан), а Вы на каждый ответ помогающих отвечаете  только лишь "не это нужно" , Вы попали на сайт, где помогающие и модераторы ОЧЕНЬ терпеливо относятся к тем, кто поленился прочитать правила форума. Почитайте их, пожалуйста :)
Цитата
aNewUser написал:
Файлы по умолчанию успешно открываются в Excel (даже если не указывать расширение .xap, САП их открывает Экселем)
Кроме этого еще есть Libre, Open, Goggle-таблицы, даже "Русский офис" и т.п. Но это совсем не значит, что они любят и понимают друг друга :)
 
А зачем код их открывает и тут же закрывает, никак не изменяя файл?
Хотя т.к. код в очередной раз обрезан, кто его знает что там...
Изменено: Hugo - 09.11.2021 12:55:46
 
Цитата
написал:
А зачем код их открывает и тут же закрывает, никак не изменяя файл?Хотя т.к. код в очередной раз обрезан, кто его знает что там...
Смысл кода - массово выкачать файлы. Код обрезан только в части личных данных, что с ним не так?

Цитата
написал:
Почитайте их, пожалуйста
Именно они были изучены перед тем, как потревожить публику своими проблемами.
Файл не вложен, т.к. работать он не будет без подключения к программе и транзакции.

Цитата
написал:
Вы на каждый ответ помогающих отвечаете  только лишь "не это нужно"
Каждый реальный ответ помогающих был проверен на работоспособность либо сейчас, либо ранее.  
 
Цитата
написал:
САП их открывает Экселем
Так тогда наверное она же и должна закрывать два оставшихся окна, это ведь после ее работы они остаются :)
Страницы: 1
Наверх