Macro scripting SAP

vba
Etiquetas: #<Tag:0x00007f11480dd800>

#1

Estimados, les saludo cordialmente y agradezco me puedan ayudar con lo siguiente. Se que este foro no es de visual basic pero tal vez alguien se le ha presentado una situación similar.

Estoy utilizando una macro en vba que permite llamar al scripting sap con la finalidad de obtener información. Hace un par de semanas, actualice Office 2010 a Office 2016 y por alguna extraña razon la funcionalidad me entrega error.

““Se ha producido el error 91 en tiempo de ejecución:””
““Variable de objeto o bloque with no establecido.””

He marcado en negritas en la depuración:

Public SapGuiAuto, WScript, msgcol
Public objGui  As GuiApplication
Public objConn As GuiConnection
Public objSess As GuiSession
Public objSBar As GuiStatusbar
Public objSheet As Worksheet
Dim W_System

Function Attach_Session() As Boolean
Dim il, it
Dim W_conn, W_Sess

If W_System = "" Then
   Attach_Session = False
   Exit Function
End If

If Not objSess Is Nothing Then
    If objSess.Info.SystemName & objSess.Info.Client = W_System Then
        Attach_Session = True
        Exit Function
    End If
End If

If objGui Is Nothing Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set objGui = SapGuiAuto.GetScriptingEngine
End If

**For il = 0 To objGui.Children.Count - 1**
**>     Set W_conn = objGui.Children(il + 0)**
**>     For it = 0 To W_conn.Children.Count - 1**
**>        Set W_Sess = W_conn.Children(it + 0)**
**>         If W_Sess.Info.SystemName & W_Sess.Info.Client = W_System Then**
**>            Set objConn = objGui.Children(il + 0)**
**>             Set objSess = objConn.Children(it + 0)**
**>             Exit For**
**>         End If**
**>     Next**
Next

If objSess Is Nothing Then
   MsgBox "No existe sesión " + W_System + " activa en SAP, o el scripting esta deshabilitado.", vbCritical + vbOKOnly
   Attach_Session = False
   Exit Function
End If

If IsObject(WScript) Then
   WScript.ConnectObject objSess, "on"
   WScript.ConnectObject objGui, "on"
End If

Set objSBar = objSess.findById("wnd[0]/sbar")
objSess.findById("wnd[0]").maximize
Attach_Session = True

End Function

Public Sub RunGUIScriptExtraerHistorico()

Dim W_Ret As Boolean

W_Ret = Attach_Session
If Not W_Ret Then
    Exit Sub
End If

On Error GoTo myerr

objSess.findById("wnd[0]").maximize
objSess.findById("wnd[0]/tbar[0]/okcd").Text = "me2n"
objSess.findById("wnd[0]").sendVKey 0
objSess.findById("wnd[0]/tbar[1]/btn[17]").press
objSess.findById("wnd[1]/usr/txtENAME-LOW").Text = "jvera"
objSess.findById("wnd[1]/usr/txtENAME-LOW").SetFocus
objSess.findById("wnd[1]/usr/txtENAME-LOW").caretPosition = 5
objSess.findById("wnd[1]").sendVKey 0
objSess.findById("wnd[1]/tbar[0]/btn[8]").press
objSess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").setCurrentCell 3, "TEXT"
objSess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").selectedRows = "3"
objSess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").doubleClickCurrentCell
objSess.findById("wnd[0]/tbar[1]/btn[16]").press
objSess.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/txt%%DYN001-LOW").SetFocus
objSess.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/txt%%DYN001-LOW").caretPosition = 0
objSess.findById("wnd[0]").sendVKey 0
objSess.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/txt%%DYN003-LOW").SetFocus
objSess.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/txt%%DYN003-LOW").caretPosition = 0
objSess.findById("wnd[0]").sendVKey 0
objSess.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/ctxt%%DYN004-LOW").SetFocus
objSess.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/ctxt%%DYN004-LOW").caretPosition = 1
objSess.findById("wnd[0]").sendVKey 0
objSess.findById("wnd[0]/tbar[1]/btn[8]").press
objSess.findById("wnd[0]/tbar[1]/btn[33]").press
objSess.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shellcont/shell").setCurrentCell 9, "TEXT"
objSess.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shellcont/shell").selectedRows = "9"
objSess.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shellcont/shell").clickCurrentCell
objSess.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
objSess.findById("wnd[1]/usr/ctxtDY_PATH").Text = "ubicacion"
objSess.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "archivo.xlsx"
objSess.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 28
objSess.findById("wnd[1]/tbar[0]/btn[11]").press
objSess.findById("wnd[0]/tbar[0]/btn[15]").press
objSess.findById("wnd[0]/tbar[0]/btn[15]").press


Exit Sub

myerr:
   MsgBox "Listo (se produjo un error)", vbCritical + vbOKOnly
    

End Sub

Sub ExtraerHistoricoCTTO()
    W_System = "PRD700"
    RunGUIScriptExtraerHistorico
    
End Sub

Alguien ha tenido un problema similar?
ademas, me di cuenta que al grabar un script en sap, el pc no me reconoce los archivos de extension .vbs, lo que me impide abrir con bloc de notas.

quedo atento a sus respuestas, saludos!


#2

Buenas,
yo tengo office2016 y no tengo problemas con SAP LOGON 740.

Mi conexión es:


Set SH = ThisWorkbook.Sheets("Hoja1")

Set Logoncontrol = CreateObject("SAP.LogonControl.1")
Set objBAPIControl = CreateObject("SAP.Functions")
Set sapConnection = Logoncontrol.NewConnection

sapConnection.Client = "X00"
sapConnection.ApplicationServer = "XX.XX.X.XXX"
sapConnection.SystemNumber = "99"
sapConnection.System = "ABC"

sapConnection.UseSAPLogonIni = False
sapConnection.Language = "ES"


If Not IsObject(Application1) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set Application1 = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = Application1.Children(0)
End If
If Not IsObject(session) Then
   Set session = Connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session, "on"
   WScript.ConnectObject Application, "on"
End If