¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Solución para principiantes en VBA y scripting de SAP: Problema sin resolver

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 46 Vistas
0
Cargando...

Hola a todos

Sé que un problema similar ya ha sido discutido, pero al revisar la solución presentada en cualquiera de esos temas no pude tener éxito (soy principiante en VBA y scripting de SAP)

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola Umur,

Gracias por tu respuesta.

El comando que abre el cuadro de diálogo GUARDAR COMO es:

session.findById("wnd[0]/mbar/menu[0]/menu[1]/menu[1]").Select

...pero recibo un error en la línea:

Wshell.Run "C:\Nueva carpeta\DataLoad.vbs " & NombreArchivo, 1, False

Mi código ahora se ve así (todo mi código junto con la configuración del Userform):


Private Sub CommandButton1_Click()

Dim MojaData
MojaData = ComboBox2.Value

Dim Companycode
Companycode = ComboBox1.Value


Dim Depreciation_area
Depreciation_area = ComboBox3.Value


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 Application1, "on"
End If

Dim sbar As String
sbar = session.findById("wnd[0]/sbar").Text

session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/n s_alr_87011990"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtBUKRS-LOW").Text = Companycode
session.findById("wnd[0]/usr/ctxtSO_ANLKL-LOW").Text = ""
session.findById("wnd[0]/usr/ctxtBERDATUM").Text = MojaData
session.findById("wnd[0]/usr/ctxtBEREICH1").Text = Depreciation_area
session.findById("wnd[0]/usr/ctxtSRTVR").Text = "0003"

session.findById("wnd[0]/usr/radSUMMB").SetFocus
session.findById("wnd[0]/tbar[1]/btn[8]").press

NombreArchivo = "C:\Nueva carpeta\Notificaciones.txt"
Wshell.Run "C:\Nueva carpeta\DataLoad.vbs " & NombreArchivo, 1, False

session.findById("wnd[0]/mbar/menu[0]/menu[1]/menu[1]").Select

Dim FileNam2
Set Wshell = CreateObject("WScript.Shell")
Do
bWindowFound = Wshell.AppActivate("Guardar como")
WScript.Sleep 1000
Loop Until bWindowFound
bWindowFound = Wshell.AppActivate("Guardar como")
If (bWindowFound) Then
Wshell.AppActivate "Guardar como"
WScript.Sleep 100
Wshell.SendKeys "{TAB}"
Wshell.SendKeys "{TAB}"
Wshell.SendKeys "{TAB}"
Wshell.SendKeys "{TAB}"
Wshell.SendKeys "{TAB}"
WScript.Sleep 100
FileNam2 = WScript.Arguments.Item(0)
Wshell.SendKeys FileNam2
WScript.Sleep 100
Wshell.SendKeys "{ENTER}"
WScript.Sleep 100

Fin Si


Fin Sub

Private Sub UserForm_Initialize()
'Vaciar cuadro de código de empresa
ComboBox1.Clear

'Llenar cuadro de código de empresa
With ComboBox1
.AddItem "BE10"
.AddItem "BE11"
.AddItem "BE12"
.AddItem "BE14"
ComboBox1.Value = "BE10"

End With

'Vaciar cuadro de saldo de activos
ComboBox2.Clear

'Llenar cuadro de saldo de activos
With ComboBox2
.AddItem "31.01.2014"
.AddItem "28.02.2014"
.AddItem "31.03.2014"
.AddItem "30.04.2014"
.AddItem "31.05.2014"
.AddItem "30.06.2014"
.AddItem "31.07.2014"
.AddItem "31.07.2014"
.AddItem "31.08.2014"
.AddItem "30.09.2014"
.AddItem "31.10.2014"
.AddItem "30.11.2014"
.AddItem "31.12.2014

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

MJ MJ - No puedo replicar una pantalla como la tuya para probarlo, pero aquí está lo que sugeriría:

Inmediatamente arriba del comando que abre el cuadro de diálogo GUARDAR COMO, inserta estas líneas:

... tu código hasta aquí.....

NombreArchivo = "C:\Aplicaciones\Notificaciones.txt" '<----- ingresa la ruta/nombre de archivo para guardar
Wshell.run "C:\Aplicaciones\CargaDatos.vbs " & NombreArchivo , 1 , Falso '<-- llama al programa cargador

... luego continúa con tu código....

Luego crea un programa "cargadatos.vbs" de la siguiente manera:

Dim NombreArchivo2
Establecer Wshell = CreateObject ( "WScript.Shell" )
Hacer
bVentanaEncontrada = Wshell.AppActivate ( "Guardar como" )
WScript.Sleep 1000
Repetir Hasta bVentanaEncontrada
bVentanaEncontrada = Wshell.AppActivate ( "Guardar como" )
si (bVentanaEncontrada ) Entonces
Wshell.appActivate "Guardar como"
WScript.Sleep 100
Wshell.sendkeys "{TAB}"
Wshell.sendkeys

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Estaba teniendo el mismo problema. Googleé el mensaje de error y encontré muchos foros/blogs que mencionaban que los espacios dentro de las rutas pueden causar este error. Sin embargo, hay algunas soluciones alternativas. No tengo todas para hacer referencia (cerré mis pestañas web antes de anotarlas todas) pero asegurarme de poner comillas dobles alrededor de la cadena que tiene espacios funcionó para mí.


Programa principal que llama al script secundario:



'//ejecutar reporte
SAPsession.findById("wnd[0]/tbar[1]/btn[8]").press

'//iniciar otro script para observar la ventana de selección de archivo
Wshell.Run Chr(34) & CurrentProject.Path & strWShellScript & Chr(34) & " " & strSAPFileNm, 1, False

'//hacer clic en el botón de descarga
SAPsession.findById("wnd[0]/tbar[1]/btn[21]").press

Script secundario en archivo ".vbs":


Dim strSAPFileNm2
Dim strWindowNm


Set Wshell = CreateObject("WScript.Shell")
strWindowNm = "Seleccionar Archivo."


Do
bWindowFound = Wshell.AppActivate(strWindowNm)
WScript.Sleep 1000
Loop Until bWindowFound
bWindowFound = Wshell.AppActivate(strWindowNm)


If (bWindowFound) Then
Wshell.AppActivate strWindowNm
Wshell.CurrentDirectory = "c:\temp"
WScript.Sleep 1000
Wshell.SendKeys "{TAB}"
Wshell.SendKeys "{TAB}"
Wshell.SendKeys "{TAB}"
Wshell.SendKeys "{TAB}"
Wshell.SendKeys "{TAB}"   
WScript.Sleep 1000
strSAPFileNm2 = WScript.Arguments.Item(0)
Wshell.sendkeys "c:\temp"
WScript.Sleep 1000
Wshell.sendkeys "{ENTER}"
W
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola,

Intenta lo siguiente:

http://scn.sap.com/thread/1540783

Saludos,

Harel

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?