SAP ile Excel arasında MAKRO birleştirme

Katılım
2 Haziran 2023
Mesajlar
3
Excel Vers. ve Dili
16 / tr
Merhaba Arkadaşlar,

Ben özel bir şirkette depo yönetimi ile ilgili çalışmaktayım ve işlemleri SAP programı üzerinden yapmaktayım. Programın kendi içinde işim ile ilgili tüm alanlara hakimim ama artan iş yoğunluğu sebebiyle proğram içinde kullandığım makrolar ile excelde kullandığım makroları birleştirmek istiyorum.

İlk olarak excel üzerinde SAP programını açarak ana sayfaya geliyorum ve açmak istediğim 1. sayfayı açabiliyorum
daha sonra sap programına yeni boş sayfada açtırıyorum ama bu sefer açılan sayfada kod sap programının ilk sayfasına girildiği için excelde hata almaktayım.

İstediğim şu;

1 - İlk önce SAP açılsın
2 - Daha sonra VL06O ekranı açılsın
3 - Daha sonra yeni pencerede VL10C ekranı açılsın
4 - Ve son olarak da yeni bir pencere açılarak VL06F ekranı açılarak işlem tamamlansın.

1 ve 2. isteği yapabiliyorum 3 ve 4 e geçemiyorum.

Kod:
Sub Recep_Anasayfa()

10
On Error Resume Next
Set SapGui = GetObject("SAPGUI")
If Err.Number <> 0 Then
Err.Clear
Set WshShell = CreateObject("WScript.Shell")
Set proc = WshShell.Exec("C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe")
Application.Wait Now + TimeValue("0:00:01")
GoTo 10:
End If

Set Appl = SapGui.GetScriptingEngine
Set Connection = Appl.OpenConnection("HA_CANLI")
If Err.Number = 1000 Then
session.findById("wnd[0]").iconify '
Exit Sub
End If
On Error GoTo 0
Set session = Connection.Children(0)
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "R.A01" 'KULLANICI'
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "123456-" 'PAROLA'
session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "TR"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 74

End Sub
Kod:
Sub VL06O()

Dim SapGuiAuto, Application, Connection, session

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]/tbar[0]/okcd").Text = "VL06O"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[31]").press
session.findById("wnd[0]/usr/ctxtLF_SVAR2").Text = "R.A"
session.findById("wnd[0]/usr/ctxtLF_SVAR2").SetFocus
session.findById("wnd[0]/usr/ctxtLF_SVAR2").caretPosition = 7
session.findById("wnd[0]/usr/btnBUTTON2").press
session.findById("wnd[0]/usr/ctxtIT_VTWEG-LOW").Text = "20"
session.findById("wnd[0]/usr/ctxtIF_VSTEL-LOW").Text = "2008"
session.findById("wnd[0]/usr/ctxtIF_VSTEL-LOW").SetFocus
session.findById("wnd[0]/usr/ctxtIF_VSTEL-LOW").caretPosition = 4
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[18]").press
session.findById("wnd[0]").sendVKey 74

session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "VL10C"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtST_VSTEL-LOW").Text = "2008"
session.findById("wnd[0]/usr/ctxtST_LEDAT-LOW").SetFocus
session.findById("wnd[0]/usr/ctxtST_LEDAT-LOW").caretPosition = 0
session.findById("wnd[0]/usr/ctxtST_LEDAT-LOW").ShowContextMenu
session.findById("wnd[0]/usr").SelectContextMenuItem "DELSCTX"
session.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB2").Select
session.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB2/ssub%_SUBSCREEN_ORDER_CRITERIA:RVV50R10C:1020/ctxtST_VBELN-LOW").SetFocus
session.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB2/ssub%_SUBSCREEN_ORDER_CRITERIA:RVV50R10C:1020/ctxtST_VBELN-LOW").caretPosition = 0
session.findById("wnd[0]").sendVKey 74

End Sub
 
Katılım
2 Haziran 2023
Mesajlar
3
Excel Vers. ve Dili
16 / tr
Arkadaşlar soru karışık olduysa detaylandırabilirim, Konu hakkında yardımcı olacak kimse yok mu ?
 
Katılım
20 Şubat 2012
Mesajlar
242
Excel Vers. ve Dili
office2007 Türkçe
Merhaba. Sap bugüne kadar kullanmadım ve bilgisayarımda kurulu değil.
Ancak araştırma neticesinde BELKİ kodun aşağıdaki gibi olması gerekir diye düşünüyorum.


Vereceği kod çalışmazsa kendi kodunuzdaki alanlar ile değiştirerek tekrar deneyin.

Kod:
Sub SapConn()

Dim Appl As Object
Dim Connection As Object
Dim session As Object
Dim WshShell As Object
Dim SapGui As Object

'Of course change for your file directory
Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", 4
Set WshShell = CreateObject("WScript.Shell")

Do Until WshShell.AppActivate("SAP Logon ")
    Application.Wait Now + TimeValue("0:00:01")
Loop

Set WshShell = Nothing

Set SapGui = GetObject("SAPGUI")
Set Appl = SapGui.GetScriptingEngine
Set Connection = Appl.Openconnection("HA_CANLI", _
    True)
Set session = Connection.Children(0)

'if You need to pass username and password
'session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "900"
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "R.A01" 'KULLANICI'
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "123456-" 'PAROLA'
session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "TR"

If session.Children.Count > 1 Then

    answer = MsgBox("Daha önce sayfa açmıştınız," & _
"Sayfayı kapatın", vbOKOnly, "Opened SAP")

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


    Exit Sub

End If

session.findById("wnd[0]").maximize
session.findById("wnd[0]").sendVKey 0 'ENTER

'sanırım bu şekilde olmalı


session.findById("wnd[0]/tbar[0]/okcd").Text = "VL06O"
session.findById("wnd[0]/tbar[1]/btn[31]").press
session.findById("wnd[0]/usr/ctxtLF_SVAR2").Text = "R.A"
session.findById("wnd[0]/usr/ctxtLF_SVAR2").SetFocus
session.findById("wnd[0]/usr/ctxtLF_SVAR2").caretPosition = 7
session.findById("wnd[0]/usr/btnBUTTON2").press
session.findById("wnd[0]/usr/ctxtIT_VTWEG-LOW").Text = "20"
session.findById("wnd[0]/usr/ctxtIF_VSTEL-LOW").Text = "2008"
session.findById("wnd[0]/usr/ctxtIF_VSTEL-LOW").SetFocus
session.findById("wnd[0]/usr/ctxtIF_VSTEL-LOW").caretPosition = 4
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[18]").press
session.findById("wnd[0]").sendVKey 74

session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "VL10C"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtST_VSTEL-LOW").Text = "2008"
session.findById("wnd[0]/usr/ctxtST_LEDAT-LOW").SetFocus
session.findById("wnd[0]/usr/ctxtST_LEDAT-LOW").caretPosition = 0
session.findById("wnd[0]/usr/ctxtST_LEDAT-LOW").ShowContextMenu
session.findById("wnd[0]/usr").SelectContextMenuItem "DELSCTX"
session.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB2").Select
session.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB2/ssub%_SUBSCREEN_ORDER_CRITERIA:RVV50R10C:1020/ctxtST_VBELN-LOW").SetFocus
session.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB2/ssub%_SUBSCREEN_ORDER_CRITERIA:RVV50R10C:1020/ctxtST_VBELN-LOW").caretPosition = 0
session.findById("wnd[0]").sendVKey 74


End Sub
 
Katılım
2 Haziran 2023
Mesajlar
3
Excel Vers. ve Dili
16 / tr
Öncelikle yardım etme çabanız için teşekkür ederim, Kullanmadığınız bir program için araştırma yapmışsınız,

Kod içinde renli olarak notlar yazdım, özetle 2. alanda yine hata almaktayım. Yeni sekme açıyor fakat yeni açılan sekmeye yazması gereken -VL10C- yazarak enter yapıp devam etmiyor,

Merhaba. Sap bugüne kadar kullanmadım ve bilgisayarımda kurulu değil.
Ancak araştırma neticesinde BELKİ kodun aşağıdaki gibi olması gerekir diye düşünüyorum.


Vereceği kod çalışmazsa kendi kodunuzdaki alanlar ile değiştirerek tekrar deneyin.

Kod:
Sub SapConn()

Dim Appl As Object
Dim Connection As Object
Dim session As Object
Dim WshShell As Object
Dim SapGui As Object

'Of course change for your file directory
Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", 4
Set WshShell = CreateObject("WScript.Shell")

Do Until WshShell.AppActivate("SAP Logon ")
    Application.Wait Now + TimeValue("0:00:01")
Loop

Set WshShell = Nothing

Set SapGui = GetObject("SAPGUI")
Set Appl = SapGui.GetScriptingEngine
Set Connection = Appl.Openconnection("HA_CANLI", _
    True)
Set session = Connection.Children(0)

'if You need to pass username and password
'session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "900"
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "R.A01" 'KULLANICI'
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "123456-" 'PAROLA'
session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "TR"

If session.Children.Count > 1 Then

    answer = MsgBox("Daha önce sayfa açmıştınız," & _
"Sayfayı kapatın", vbOKOnly, "Opened SAP")

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


    Exit Sub

End If

session.findById("wnd[0]").maximize
session.findById("wnd[0]").sendVKey 0 'ENTER

'sanırım bu şekilde olmalı


session.findById("wnd[0]/tbar[0]/okcd").Text = "VL06O"
session.findById("wnd[0]").sendVKey 0                 ' Bu alanda hata aldım ve bu kırmızı yazdığımla çözüldü hata'
session.findById("wnd[0]/tbar[1]/btn[31]").press
session.findById("wnd[0]/usr/ctxtLF_SVAR2").Text = "R.A"
session.findById("wnd[0]/usr/ctxtLF_SVAR2").SetFocus
session.findById("wnd[0]/usr/ctxtLF_SVAR2").caretPosition = 7
session.findById("wnd[0]/usr/btnBUTTON2").press
session.findById("wnd[0]/usr/ctxtIT_VTWEG-LOW").Text = "20"
session.findById("wnd[0]/usr/ctxtIF_VSTEL-LOW").Text = "2008"
session.findById("wnd[0]/usr/ctxtIF_VSTEL-LOW").SetFocus
session.findById("wnd[0]/usr/ctxtIF_VSTEL-LOW").caretPosition = 4
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[18]").press
session.findById("wnd[0]").sendVKey 74
-------------------------------------------------------------------------------------------------  Bu çizğinini altını aktif edemiyorum, sizin kod ile de aktif olmadı yeni ekme açıyor ve orada kalıyor,
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "VL10C"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtST_VSTEL-LOW").Text = "2008"
session.findById("wnd[0]/usr/ctxtST_LEDAT-LOW").SetFocus
session.findById("wnd[0]/usr/ctxtST_LEDAT-LOW").caretPosition = 0
session.findById("wnd[0]/usr/ctxtST_LEDAT-LOW").ShowContextMenu
session.findById("wnd[0]/usr").SelectContextMenuItem "DELSCTX"
session.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB2").Select
session.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB2/ssub%_SUBSCREEN_ORDER_CRITERIA:RVV50R10C:1020/ctxtST_VBELN-LOW").SetFocus
session.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB2/ssub%_SUBSCREEN_ORDER_CRITERIA:RVV50R10C:1020/ctxtST_VBELN-LOW").caretPosition = 0
session.findById("wnd[0]").sendVKey 74


End Sub
 
Katılım
20 Şubat 2012
Mesajlar
242
Excel Vers. ve Dili
office2007 Türkçe
Bu kod SAP'a ait id leri dökebiliyormuş.
Deneyin, sizin id orada mı bakın.
linki

Kod:
'-Begin-----------------------------------------------------------------

Option Explicit

Dim gColl() As String
Dim j As Integer

Sub GetAll(Obj As Object) '---------------------------------------------
'-
'- Recursively called sub routine to get the IDs of all UI elements
'-
'-----------------------------------------------------------------------

  Dim cntObj As Integer
  Dim i As Integer
  Dim Child As Object

  On Error Resume Next
  cntObj = Obj.Children.Count()
  If cntObj > 0 Then
    For i = 0 To cntObj - 1
      Set Child = Obj.Children.Item(CLng(i))
      GetAll Child
      ReDim Preserve gColl(j)
      gColl(j) = CStr(Child.ID)
      j = j + 1
    Next
  End If
  On Error GoTo 0

End Sub

Sub Start() '-----------------------------------------------------------
'-
'- Sub routine to get all UI elements of the SAP GUI for Windows
'- with connection 0 and session 0
'-
'-----------------------------------------------------------------------

  Dim SapGuiAuto As Object
  Dim app As SAPFEWSELib.GuiApplication
  Dim connection As SAPFEWSELib.GuiConnection
  Dim session As SAPFEWSELib.GuiSession
  Dim i As Integer

  Set SapGuiAuto = GetObject("SAPGUI")
  If Not IsObject(SapGuiAuto) Then
    Exit Sub
  End If

  Set app = SapGuiAuto.GetScriptingEngine
  If Not IsObject(app) Then
    Exit Sub
  End If

  Set connection = app.Children(0)
  If Not IsObject(connection) Then
    Exit Sub
  End If

  If connection.DisabledByServer = True Then
    Exit Sub
  End If

  Set session = connection.Children(0)
  If Not IsObject(session) Then
    Exit Sub
  End If

  If session.Info.IsLowSpeedConnection = True Then
    Exit Sub
  End If

  GetAll session
 
  For i = LBound(gColl) To UBound(gColl)
    Cells(i + 1, 1) = gColl(i)
  Next

End Sub
 
Üst