Текущее время: Чт, мар 28 2024, 21:31

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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