on 10-25-2017 4:49 PM
Now the real issue. I have beaten myself on my searching abilities for the last few days, and I just decided to give up looking, and just ask. I know there have been others that have posted about the Save As in SAP when pulling a report down to excel, but nothing has matched the issue I am having.
In reality, my script works flawlessly for myself and one other in my department. Three others, have encountered issues. I was able to troubleshoot a little bit and I think I know what is causing it, but I dont know how to go about fixing it to ensure smooth functionality for everyone.
Sometimes when downloading reports into an excel format from SAP (using the MB_Export" and "XXL"), the dialog to enter a directory/file name shows up. This allows someone to generate a new file, replace an existing file, Extend (append) an existing report. This is the dialog window that works for me, and has been programmed into my script.
Other times (seems random to me), the Windows Save As dialog box shows up, which causes an issue for others that are helping me test. Since the fields in the script are not in the Save As dialog, i get an issue. Does anyone know why this dialog would show up vs a windows save as, or what determines it?
Is there any way to program in VBS/VBA to get this to default to this dialog box? "Wnd[1]".
Please help.. Its hurting my head.
<code>Option Explicit
Public SAPGuiAuto As Object, WScript, WShell, WinTitle
Public objApp As GuiApplication
Public objConn As GuiConnection
Public objSess As GuiSession
Public objSBar As GuiStatusbar
Public objWS As Worksheet, objWB As Workbook
Dim FilePath
Function Attach()
Dim W_System, W_Conn, W_Sess, SysID, TCode, TVar, SaveAsPath, SaveAsName
Dim x, s, i, j
Dim GOSAP(2) As Integer
Set objWB = ActiveWorkbook
Set objWS = Control
W_System = objWS.Range("System_Client").Value
WinTitle = objWS.Range("System").Value
SysID = objWS.Range("System_ID").Value
TCode = objWS.Range("T_Code").Value
TVar = objWS.Range("T_Variant").Value
SaveAsPath = objWS.Range("Output_Dest_Path")
SaveAsName = objWS.Range("Output_Name")
Debug.Print W_System, WinTitle, SysID, TCode, TVar
Set SAPGuiAuto = Nothing
'Check to see if SAPGui is running.
On Error GoTo SAPOPEN 'Go to errorhandling
Set SAPGuiAuto = GetObject("SAPGUI")
On Error GoTo 0
ResumeSAP:
'If SAPGui is not running, Run SAPLOGON.EXE using Windows
If SAPGuiAuto Is Nothing Then
Set WShell = CreateObject("WScript.shell")
If IsObject(WShell) Then
' Location of SAP Folder
WShell.exec "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"
End If
'Wait for the SAPGui Login to load before continuing script
While Not WShell.AppActivate(WinTitle)
Application.Wait (Now + TimeValue("0:00:1"))
Wend
End If
'Activate the GUI
Set SAPGuiAuto = GetObject("SAPGUI")
Set objApp = SAPGuiAuto.GetScriptingEngine
'Check to see if there is any instances of SAP Open. If not, open a new connection to ERP
If objApp.Children.Count() = 0 Then
Set objConn = objApp.OpenConnection(SysID)
Set objSess = objConn.Children(0)
objSess.FindById("wnd[0]").SendVKey 0
Debug.Print "New Window Opened"
ElseIf objApp.Children.Count > 0 Then 'If there is an open connection, loop through to find if there is an active connection to ERP
Debug.Print "Find if there is a correct Connection/Session"
For x = 0 To objApp.Children.Count() - 1 'Each open connection
Set W_Conn = objApp.Children(x + 0)
Debug.Print W_Conn.Description
If W_Conn.Description = SysID Then 'Check if the connection is to ERP.
For s = 0 To W_Conn.Children.Count() - 1 'If ERP is a connection, check sessions for blank/correct transaction sessions
Set W_Sess = W_Conn.Children(s + 0)
If W_Sess.Info.SystemName & W_Sess.Info.Client = W_System And W_Sess.Info.Transaction = TCode Then
Set objConn = objApp.Children(x + 0)
Set objSess = objConn.Children(s + 0)
Attach = 1
GoTo SAPReady ' Exit. Code 1
ElseIf W_Sess.Info.SystemName & W_Sess.Info.Client = W_System And W_Sess.Info.Transaction = "SESSION_MANAGER" Then
Set objConn = objApp.Children(x + 0)
Set objSess = objConn.Children(s + 0)
Attach = 2
Debug.Print "Correct System Found & Blank Session"
Debug.Print x
Debug.Print s
GoTo SAPReady
ElseIf W_Sess.Info.SystemName & W_Sess.Info.Client = W_System Then
Set objConn = objApp.Children(x + 0)
j = objConn.Children.Count
Set objSess = objConn.Children(s + 0)
objSess.CreateSession
s = s + 1
While objConn.Children.Count <= j
Application.Wait (Now + TimeValue("0:00:1"))
Wend
Debug.Print "J= " & j
Debug.Print objConn.Children.Count
Debug.Print "XXXXXX - " & objApp.Connections.Item(0).Sessions.Count
Set objSess = objConn.Children(s + 0)
Attach = 3
Debug.Print "Correct System Found.No Blank Sessions. New Window Created"
Debug.Print x
Debug.Print s
GoTo SAPReady
End If
Next
End If
Next
Debug.Print "NO ACTIVE ERP CONNECTIONS"
Set objConn = objApp.OpenConnection(SysID)
Set objSess = objConn.Children(0)
objSess.FindById("wnd[0]").SendVKey 0
Debug.Print x
Debug.Print s
Debug.Print objSess.Info.SystemName
Debug.Print objSess.Info.Client
Attach = 4
End If
SAPReady:
objSess.FindById("wnd[0]").Maximize
objSess.FindById("wnd[0]/tbar[0]/okcd").Text = "/n" & TCode
objSess.FindById("wnd[0]").SendVKey 0
Dim layout, r As Integer, LayoutVariant, arows
objSess.FindById("wnd[0]/tbar[1]/btn[17]").Press
objSess.FindById("wnd[1]/usr/txtENAME-LOW").Text = ""
objSess.FindById("wnd[1]/tbar[0]/btn[8]").Press
Set layout = objSess.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell")
arows = layout.RowCount()
For r = 0 To arows - 1
LayoutVariant = layout.GetCellValue(r, "VARIANT")
If LayoutVariant = TVar Then
layout.CurrentCellRow = r
Exit For
End If
Next
objSess.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").SelectedRows = r
objSess.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").DoubleClickCurrentCell
objSess.FindById("wnd[0]/tbar[1]/btn[8]").Press
objSess.FindById("wnd[0]/usr/shell/shellcont/shell").PressToolbarContextButton "&MB_EXPORT"
objSess.FindById("wnd[0]/usr/shell/shellcont/shell").SelectContextMenuItem "&XXL"
objSess.FindById("wnd[1]/usr/cmbG_LISTBOX").SetFocus
objSess.FindById("wnd[1]/usr/cmbG_LISTBOX").Key = "10"
objSess.FindById("wnd[1]/tbar[0]/btn[0]").Press
objSess.FindById("wnd[1]/usr/ctxtDY_PATH").Text = SaveAsPath & "\"
objSess.FindById("wnd[1]/usr/ctxtDY_FILENAME").Text = SaveAsName & ".xlsx"
objSess.FindById("wnd[1]/tbar[0]/btn[11]").Press
MyExit:
Debug.Print "Attach= " & Attach
Set SAPGuiAuto = Nothing
Set objApp = Nothing
Set objSess = Nothing
Set objConn = Nothing
Exit Function
SAPOPEN:
Debug.Print "SAP IS NOT OPEN"
GoTo ResumeSAP
On Error GoTo 0
End Function
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
107 | |
12 | |
11 | |
6 | |
5 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.