# VBA Excel to SAP Program



## VBA is new to me (Dec 10, 2018)

Hi,
I am trying to write a VBA code from excel to populate fields within SAP program.
I can get all of them to work except for the field titled Reqmt No.
I have attached the code below and a screen dump of the SAP fields...can anyone she some light/help please?




```
Sub UpdatePO()


    Dim SystemNumber, SapGuiAuto, SAPApp, SAPCon, session
    SystemNumber = 1
    
    Set SapGuiAuto = GetObject("SAPGUI")  'Get the SAP GUI Scripting object
    Set SAPApp = SapGuiAuto.GetScriptingEngine 'Get the currently running SAP GUI
    Set SAPCon = SAPApp.Children(0) 'Get the first system that is currently connected
    Set session = SAPCon.Children(SystemNumber - 1) 'Get the first session (window) on that connection
    
    Dim i, j, k, statusMessage, rowCount, HeaderNoteMessage, ItemNoteMessage, PO, POLine, POLineDelDate, ReqmtNo, strScreen, strScreen2
        
    i = 1
    Do While Sheets("PO Line Del Date").Cells(i + 1, 1).Value <> ""
        i = i + 1
        
        ' Get the PO number, PO Line item, and Header note message from "PO Line Del Date" tab of the Excel file
        PO = Sheets("PO Line Del Date").Cells(i, 1).Value
        POLine = Sheets("PO Line Del Date").Cells(i, 2).Value
        POLineDelDate = Sheets("PO Line Del Date").Cells(i, 3).Value
        ReqmtNo = Sheets("PO Line Del Date").Cells(i, 4).Value
        HeaderNoteMessage = Sheets("PO Line Del Date").Cells(i, 5).Value
        HeaderNoteMessage = Now() & " - " & session.Info.User & " - Updated Delivery Date for PO line " & POLine & " - " & HeaderNoteMessage & vbCr
        
        'Debug.Print session.Info.User
        session.findById("wnd[0]").resizeWorkingPane 200, 25, False
        session.findById("wnd[0]/tbar[1]/btn[17]").press
        session.findById("wnd[1]/usr/subSUB0:SAPLMEGUI:0003/ctxtMEPO_SELECT-EBELN").Text = PO
        session.findById("wnd[1]/usr/subSUB0:SAPLMEGUI:0003/ctxtMEPO_SELECT-EBELN").caretPosition = 10
        session.findById("wnd[1]/tbar[0]/btn[0]").press
                    
                  '****Edit Mode*******
        '***Check for change or display mode *****
        If Not (session.findById("wnd[0]/mbar/menu[0]/menu[6]").Changeable) Then
                session.findById("wnd[0]").SendVKey 7
                session.findById("wnd[0]").SendVKey 0
                
        Else
                session.findById("wnd[0]").SendVKey 0
        End If


        '****If PO is subject to Release, hit Enter*******
        While Not (session.findById("wnd[0]/sbar").Text = "")
            session.findById("wnd[0]").SendVKey 0
        Wend
        
        '****Collapse Header*******
        session.findById("wnd[0]").SendVKey 29
        
        '*** Select Line item to update tax code
        On Error Resume Next
          session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/btnEDITFILTER").press
          session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0600/btnAPP_WL_SING").press
          session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0600/btn600_BUTTON").press
          session.findById("wnd[2]/usr/ssub%_SUBSCREEN_FREESEL:SAPLSSEL:1105/ctxt%%DYN001-LOW").Text = POLine
          session.findById("wnd[2]/usr/ssub%_SUBSCREEN_FREESEL:SAPLSSEL:1105/ctxt%%DYN001-LOW").caretPosition = 2
          session.findById("wnd[2]/tbar[0]/btn[0]").press
          session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/ctxtMEPO1211-EEIND[9,0]").Text = POLineDelDate
          session.findById("wnd[0]").SendVKey 28
          session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB1:SAPLMEGUI:6000/cmbDYN_6000-LIST").SetFocus
          session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB1:SAPLMEGUI:6000/cmbDYN_6000-LIST").Key = "   1"
          session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT5").Select
        Debug.Print Err.Description
        If Not (Err.Description = "") Then
            For j = 10 To 20
                On Error Resume Next
                strScreen = "00" & CStr(j)
                session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:" & strScreen & "/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/btnEDITFILTER").press
                session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0600/btnAPP_WL_SING").press
                session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0600/btn600_BUTTON").press
                session.findById("wnd[2]/usr/ssub%_SUBSCREEN_FREESEL:SAPLSSEL:1105/ctxt%%DYN001-LOW").Text = POLine
                session.findById("wnd[2]/usr/ssub%_SUBSCREEN_FREESEL:SAPLSSEL:1105/ctxt%%DYN001-LOW").caretPosition = 2
                session.findById("wnd[2]/tbar[0]/btn[0]").press
                session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:" & strScreen & "/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/ctxtMEPO1211-EEIND[9,0]").Text = POLineDelDate
                session.findById("wnd[0]").SendVKey 28
                session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:" & strScreen & "/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB1:SAPLMEGUI:6000/cmbDYN_6000-LIST").SetFocus
                session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:" & strScreen & "/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB1:SAPLMEGUI:6000/cmbDYN_6000-LIST").Key = "   1"
                session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:" & strScreen & "/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT5").Select
                If Err.Description = "" Then
                    On Error GoTo 0
                    Exit For
                End If
            Next j
        End If
    
       
        '***Delivery Schedule Tab to update Statistical Delivery Date
'        session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT5").Select
'        session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT5/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1320/tblSAPLMEGUITC_1320/ctxtMEPO1320-SLFDT[5,0]").Text = POLineDelDate
    
        '***Text tab to enter note in Item Note
        ' Removed this section because we want to put the message in the header note instead
        'session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT15").Select
        'session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT15/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/cntlTEXT_TYPES_0200/shell").SelectedNode = "F09"
        'ItemNoteMessage = ItemNoteMessage & session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT15/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/subEDITOR:SAPLMMTE:0201/cntlTEXT_EDITOR_0201/shellcont/shell").Text
        'session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT15/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/subEDITOR:SAPLMMTE:0201/cntlTEXT_EDITOR_0201/shellcont/shell").Text = ItemNoteMessage
        'session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT15/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/subEDITOR:SAPLMMTE:0201/cntlTEXT_EDITOR_0201/shellcont/shell").SetSelectionIndexes 25, 25
    
        
        '****Press Header details button *****
        session.findById("wnd[0]").SendVKey 26


        '****Update Headernote with message*****
        On Error Resume Next
        session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB1:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1102/tabsHEADER_DETAIL/tabpTABHDT3").Select
        session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB1:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1102/tabsHEADER_DETAIL/tabpTABHDT3/ssubTABSTRIPCONTROL2SUB:SAPLMEGUI:1230/subTEXTS:SAPLMMTE:0100/cntlTEXT_TYPES_0100/shell").SelectedNode = "F02"
        HeaderNoteMessage = HeaderNoteMessage & vbCr & session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB1:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1102/tabsHEADER_DETAIL/tabpTABHDT3/ssubTABSTRIPCONTROL2SUB:SAPLMEGUI:1230/subTEXTS:SAPLMMTE:0100/subEDITOR:SAPLMMTE:0101/cntlTEXT_EDITOR_0101/shellcont/shell").Text
        session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB1:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1102/tabsHEADER_DETAIL/tabpTABHDT3/ssubTABSTRIPCONTROL2SUB:SAPLMEGUI:1230/subTEXTS:SAPLMMTE:0100/subEDITOR:SAPLMMTE:0101/cntlTEXT_EDITOR_0101/shellcont/shell").Text = HeaderNoteMessage
        If Not (Err.Description = "") Then
            For j = 10 To 20
                Debug.Print Err.Description
                On Error Resume Next
                strScreen2 = "00" & CStr(j)
                session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:" & strScreen2 & "/subSUB1:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1102/tabsHEADER_DETAIL/tabpTABHDT3").Select
                session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:" & strScreen2 & "/subSUB1:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1102/tabsHEADER_DETAIL/tabpTABHDT3/ssubTABSTRIPCONTROL2SUB:SAPLMEGUI:1230/subTEXTS:SAPLMMTE:0100/cntlTEXT_TYPES_0100/shell").SelectedNode = "F02"
                HeaderNoteMessage = HeaderNoteMessage & vbCr & session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:" & strScreen2 & "/subSUB1:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1102/tabsHEADER_DETAIL/tabpTABHDT3/ssubTABSTRIPCONTROL2SUB:SAPLMEGUI:1230/subTEXTS:SAPLMMTE:0100/subEDITOR:SAPLMMTE:0101/cntlTEXT_EDITOR_0101/shellcont/shell").Text
                session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:" & strScreen2 & "/subSUB1:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1102/tabsHEADER_DETAIL/tabpTABHDT3/ssubTABSTRIPCONTROL2SUB:SAPLMEGUI:1230/subTEXTS:SAPLMMTE:0100/subEDITOR:SAPLMMTE:0101/cntlTEXT_EDITOR_0101/shellcont/shell").Text = HeaderNoteMessage
                If Err.Description = "" Then
                    On Error GoTo 0
                    Exit For
                End If
            Next
        End If
        
        '***Message Output button******
'        session.findById("wnd[0]/tbar[1]/btn[21]").press
'        On Error Resume Next
'        While Not (session.findById("wnd[0]/sbar").Text = "")
'            session.findById("wnd[0]").SendVKey 0
'        Wend
'        On Error GoTo 0
'        Debug.Print session.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3").rowCount
'        Row = 0
'        Outtext = session.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/ctxtDNAST-KSCHL[1," & Row & "]").Text
'        If Outtext <> "ZZEU" Then
'          Do While Outtext <> "ZZEU"
'            Row = Row + 1
'            Outtext = session.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/ctxtDNAST-KSCHL[1," & Row & "]").Text
'          Loop
'        End If
'        session.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3").getAbsoluteRow(Row).selected = True
'        session.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/lblDV70A-STATUSICON[0,0]").SetFocus
'        session.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/lblDV70A-STATUSICON[0,0]").caretPosition = 0
'        '***Trash button
'        If Not (session.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/cmbNAST-NACHA[3,0]").Text = "") Then
'            session.findById("wnd[0]/tbar[1]/btn[18]").press
'            session.findById("wnd[1]/tbar[0]/btn[0]").press
'        End If
        
        '***Back to main screen
 '       session.findById("wnd[0]/tbar[0]/btn[3]").press
 '       On Error Resume Next
 '       While Not (session.findById("wnd[0]/sbar").Text = "")
 '           session.findById("wnd[0]").SendVKey 0
 '       Wend
 '       On Error GoTo 0
        
        '***Save PO
        On Error Resume Next
        session.findById("wnd[0]/tbar[0]/btn[11]").press
        session.findById("wnd[1]/usr/btnSPOP-VAROPTION1").press
        On Error GoTo 0
        '*****Bypass random message output dialog box ********
        On Error Resume Next
        session.findById("wnd[1]/tbar[0]/btn[0]").press
        session.findById("wnd[1]/usr/btnSPOP-VAROPTION1").press
        On Error GoTo 0




        '***Log Message
        statusMessage = session.findById("wnd[0]/sbar").Text
        Debug.Print statusMessage
        If Not (statusMessage = "") Then
          Sheets("PO Line Del Date").Cells(i, 6).Value = statusMessage
        Else
          Sheets("PO Line Del Date").Cells(i, 6).Value = "No status Message"
        End If
        
        Sheets("PO Line Del Date").Cells(1, 7).Value = (i - 1)
        
    Loop
      
    MsgBox "Congratulations!  You've updated delivery dates for " & (i - 1) & " purchase order line items."
    
End Sub
```


----------

