Текущее время: Пт, июн 07 2024, 02:26

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Как из VBA активировать запущенное окно SAP после действий между книгами EXCEL
СообщениеДобавлено: Ср, окт 14 2020, 10:11 
Начинающий
Начинающий

Зарегистрирован:
Ср, окт 14 2020, 10:02
Сообщения: 2
Здравствуйте, помогите, пожалуйста, активировать запущенное окно с транзакцией ZMM4TR021, которое деактивируется после сессии с EXCEL-книгами.

Code:
Sub OpenSessionFromLogon()
Dim SapGui
Dim Applic
Dim connection
Dim session
Dim WSHShell
Shell “C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe”, vbNormalFocus
Set WSHShell = CreateObject(“WScript.Shell”)
Do Until WSHShell.AppActivate(“SAP Logon “)
Application.Wait Now + TimeValue(“0:00:02”)
Loop
Set WSHShell = Nothing
Set SapGui = GetObject(“SAPGUI”)
Set Applic = SapGui.GetScriptingEngine
Set connection = Applic.OpenConnection(“‘ ******* – Automatic Logon”, True)
Set session = connection.Children(0)

Windows(“Data.xlsm”).Activate
Sheets(“Start”).Select
Columns(“C:C”).Select
Selection.Copy
Application.Wait Now + TimeValue(“0:00:01”)

session.findById(“wnd[0]/tbar[0]/okcd”).Text = “zmm4tr021”
session.findById(“wnd[0]”).sendVKey 0
Application.Wait Now + TimeValue(“0:00:01”)
session.findById(“wnd[0]/usr/ctxtP_VARI”).Text = “FOR_EEDC_INB”
session.findById(“wnd[0]/usr/ctxtP_VARI”).SetFocus
session.findById(“wnd[0]/usr/ctxtP_VARI”).caretPosition = 12
session.findById(“wnd[0]/usr/btn%_S_SHPTAG_%_APP_%-VALU_PUSH”).press
session.findById(“wnd[1]/tbar[0]/btn[24]”).press
session.findById(“wnd[1]/tbar[0]/btn[8]”).press
session.findById(“wnd[0]/tbar[1]/btn[8]”).press
session.findById(“wnd[0]/mbar/menu[0]/menu[3]/menu[1]”).Select
session.findById(“wnd[1]/tbar[0]/btn[11]”).press

Application.OnTime Now + TimeValue(“00:00:7”), “SAP_3LTS”
Set session = Nothing

Windows(“Data.xlsm”).Activate
Sheets(“zmm4tr021”).Select
With Sheets(“zmm4tr021”).ListObjects(“Table3”)

‘Check If any data exists in the table
If Not .DataBodyRange Is Nothing Then
‘Clear Content from the table
.DataBodyRange.ClearContents
Application.Wait Now + TimeValue(“0:00:01”)
End If

End With

Windows(“export.xlsx”).Activate
Sheets(“Sheet1”).Select
Application.Wait Now + TimeValue(“0:00:01”)
Application.DisplayAlerts = False
Cells.Select
Selection.Copy
Workbooks(“export.xlsx”).Close SaveChanges:=False
Application.Wait Now + TimeValue(“0:00:01”)

Windows(“Data.xlsm”).Activate
Sheets(“zmm4tr021”).Select
Range(“A1”).Select
ActiveSheet.Paste
Application.Wait Now + TimeValue(“0:00:01”)

Windows(“Data.xlsm”).Activate
Sheets(“zmm4tr021”).Select
Columns(“L:L”).Select
Selection.Copy
Application.Wait Now + TimeValue(“0:00:01”)

‘How to activate SAP windows again?

End Sub


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как из VBA активировать запущенное окно SAP после действий между книгами EXCEL
СообщениеДобавлено: Пт, окт 16 2020, 13:02 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
Code:
Windows(“Data.xlsm”).Activate
Sheets(“zmm4tr021”).Select
Range(“A1”).Select
ActiveSheet.Paste
Application.Wait Now + TimeValue(“0:00:01”)

Зачем такой жуткий код с переключением между книгами? Макрорекордером штатным видимо записывали. Обращайтесь напрямую к ячейкам в другой книге.
Code:
Workbooks(“Data.xlsm”).WorkSheets(“zmm4tr021”).Range(“A1”).Paste


и желательно следом после копипаста каждого вычищать буфер обмена.
Code:
Application.Cutcopymode = false


и вот такую вот дичь зачем? DoEvents просто вставляйте, если желаете чтобы эксель надолго не зависал.
Code:
Application.Wait Now + TimeValue(“0:00:01”)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как из VBA активировать запущенное окно SAP после действий между книгами EXCEL
СообщениеДобавлено: Ср, окт 21 2020, 17:36 
Начинающий
Начинающий

Зарегистрирован:
Ср, окт 14 2020, 10:02
Сообщения: 2
pberezin написал:
Code:
Windows(“Data.xlsm”).Activate
Sheets(“zmm4tr021”).Select
Range(“A1”).Select
ActiveSheet.Paste
Application.Wait Now + TimeValue(“0:00:01”)

Зачем такой жуткий код с переключением между книгами? Макрорекордером штатным видимо записывали. Обращайтесь напрямую к ячейкам в другой книге.
Код хорошо работает без единого бага в течении больше 100 запусков
Code:
Workbooks(“Data.xlsm”).WorkSheets(“zmm4tr021”).Range(“A1”).Paste
Данный код работает исключительно при копировании. При вставке каждый раз выдает ошибку


и желательно следом после копипаста каждого вычищать буфер обмена.
Спасибо, добавил
Code:
Application.Cutcopymode = false


и вот такую вот дичь зачем? DoEvents просто вставляйте, если желаете чтобы эксель надолго не зависал.
DoEvents плохо работает с SAP, другими словами не успевает копировать данные с екселя в САП
Code:
Application.Wait Now + TimeValue(“0:00:01”)


Меня устраивает мой код, за исключением необходимости постоянно запускать новую сессию SAP прерывая предыдущую. VBS без проблем находит уже запущенную сессию, с VBA так не работает


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как из VBA активировать запущенное окно SAP после действий между книгами EXCEL
СообщениеДобавлено: Пт, окт 23 2020, 13:36 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
Цитата:
Меня устраивает мой код

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

Цитата:
VBS без проблем находит уже запущенную сессию, с VBA так не работает

На приличных продуктивах при попытке запуска левых vbs-скриптов начинают визжать всякие антивирусные защиты, информбезопасность лютует и проч. Просто те скрипты, которые ваяет родной макрорекордер гуискрипта - они вполне вклеиваются в vba-редактор прям в саму экселину, и работают оттуда. Получается целостная эксель-автоматизация, а не россыпь скриптов на диске. На экселины sap-продуктивы ругаются реже, т.к. довольно тесная интеграция.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB