Trabajo en un código para automatizar el obtener un reporte de producción. Al ejecutar el código este copia los campos de fechas y turno de trabajo que necesito, pero si cambio la fecha y turno de trabajo, al volver a ejecutar, este me repite los datos de la primera ejecución en fecha y turno.
Set excelApp = CreateObject("Excel.Application")
Set workbook = excelApp.Workbooks.Open(excelFilePath)
Set worksheet = workbook.Sheets("MACROS PROD")
Dim budatLow As String
Dim budatHigh As String
Dim exnamLow As String
budatLow = worksheet.Range("A2").Value
budatHigh = worksheet.Range("C2").Value
exnamLow = worksheet.Range("B4").Value
workbook.Close False
excelApp.Quit
Set worksheet = Nothing
Set workbook = Nothing
Set excelApp = Nothing
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.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
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell").doubleClickNode "F00002"
session.findById("wnd[0]/usr/ctxt$BUDAT-LOW").text = budatLow
session.findById("wnd[0]/usr/ctxt$BUDAT-HIGH").text = budatHigh
session.findById("wnd[0]/usr/ctxt$EXNAM-LOW").text = exnamLow
session.findById("wnd[0]/usr/ctxtALV_DEF").text = "/PROD TURNO"
session.findById("wnd[0]/usr/ctxtALV_DEF").setFocus
session.findById("wnd[0]/usr/ctxtALV_DEF").caretPosition = 11
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[43]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press
En tu código, parece que estás utilizando SAP GUI Scripting para automatizar la obtención de un reporte de producción. El problema que describes sugiere que los valores de las fechas y el turno de trabajo no se actualizan correctamente entre ejecuciones.
El problema podría estar relacionado con cómo se manejan las variables y el objeto de Excel. Vamos a revisar algunos puntos importantes y hacer algunas recomendaciones para asegurarnos de que las variables se actualicen correctamente cada vez que ejecutes el código.
Asegurarse de que Excel cierra completamente: Aunque estás cerrando el workbook y la aplicación de Excel, a veces Excel no se cierra completamente y puede quedar en memoria. Esto puede causar problemas en ejecuciones posteriores.
Refrescar las variables de SAP: Es importante asegurarse de que las variables utilizadas en SAP GUI se refresquen correctamente. Esto puede implicar una limpieza adecuada de los objetos y variables utilizados.
Verificar los nombres de los campos: Asegúrate de que los nombres de los campos en SAP GUI coincidan correctamente y que no haya errores de sintaxis.
Agregar validaciones y depuración: Incluye mensajes de depuración para verificar que los valores están siendo asignados correctamente en cada ejecución.
A continuación, te presento una versión mejorada del código con algunos ajustes y recomendaciones para asegurar el correcto funcionamiento:
' Cerrar cualquier instancia previa de Excel para evitar conflictos
On Error Resume Next
Set excelApp = GetObject(, "Excel.Application")
If Not excelApp Is Nothing Then
excelApp.Quit
End If
On Error GoTo 0
' Iniciar una nueva instancia de Excel y abrir el archivo
Set excelApp = CreateObject("Excel.Application")
Set workbook = excelApp.Workbooks.Open(excelFilePath)
Set worksheet = workbook.Sheets("MACROS PROD")
' Leer los valores de las celdas
Dim budatLow As String
Dim budatHigh As String
Dim exnamLow As String
budatLow = worksheet.Range("A2").Value
budatHigh = worksheet.Range("C2").Value
exnamLow = worksheet.Range("B4").Value
' Cerrar el workbook sin guardar y la aplicación de Excel
workbook.Close False
excelApp.Quit
' Limpiar los objetos de Excel
Set worksheet = Nothing
Set workbook = Nothing
Set excelApp = Nothing
' Iniciar SAP GUI Scripting
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.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
' Verificar que se estableció la conexión con SAP
If Not IsObject(session) Then
MsgBox "No se pudo establecer la conexión con SAP. Verifica tu configuración."
Exit Sub
End If
' Ejecutar los comandos de SAP GUI
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell").doubleClickNode "F00002"
session.findById("wnd[0]/usr/ctxt$BUDAT-LOW").text = budatLow
session.findById("wnd[0]/usr/ctxt$BUDAT-HIGH").text = budatHigh
session.findById("wnd[0]/usr/ctxt$EXNAM-LOW").text = exnamLow
session.findById("wnd[0]/usr/ctxtALV_DEF").text = "/PROD TURNO"
session.findById("wnd[0]/usr/ctxtALV_DEF").setFocus
session.findById("wnd[0]/usr/ctxtALV_DEF").caretPosition = 11
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[43]").pres
Puntos claves de esta versión:
Cierra cualquier instancia previa de Excel para evitar conflictos.
Agrega mensajes de depuración para asegurar que las variables se actualizan correctamente.
Verifica que se establece la conexión con SAP antes de proceder.
Limpia adecuadamente los objetos utilizados en el script.
Prueba esta versión mejorada y verifica si resuelve el problema de actualización de las fechas y turnos de trabajo.