Soru SAP'den makro ile veri çekmek hakkında destek

saccilarlid

New member
PVM
#1
SAP'den makro ile veri çekmek için bir kod yazdım ancak başlangıç kısmında hata veriyor. Yardımcı olabilir misiniz?(kullanıcı adı ve şifreye X yazdım)
Kod:
Sub MB51()

If Not IsObject(Application) Then

   Set SapGuiAuto = GetObject("SAPGUI")

   Set SAPapp = SapGuiAuto.GetScriptingEngine

End If

If Not IsObject(Connection) Then

   Set Connection = SAPApplication.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/txtRSYST-MANDT").Text = "PR2 (Canlı)"

session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "X"

session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "X"

session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "TR"

session.findById("wnd[0]/usr/txtRSYST-LANGU").SetFocus

session.findById("wnd[0]/usr/txtRSYST-LANGU").caretPosition = 2

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]").maximize

session.findById("wnd[0]/tbar[0]/okcd").Text = "mb51"

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/usr/ctxtMATNR-LOW").Text = "1000000"

session.findById("wnd[0]/usr/ctxtMATNR-HIGH").Text = "9000000"

session.findById("wnd[0]/usr/ctxtBWART-LOW").Text = "101"

session.findById("wnd[0]/usr/ctxtBWART-HIGH").Text = "102"

session.findById("wnd[0]/usr/ctxtBUDAT-LOW").Text = InputBox("Günaydın PVM'ye Hoşgeldiniz, Lütfen dd.mm.yy olacak şekilde başlangıç tarihini giriniz")

session.findById("wnd[0]/usr/ctxtBUDAT-HIGH").Text = InputBox("Lütfen dd.mm.yy olacak şekilde bitiş tarihini giriniz")

session.findById("wnd[0]/usr/ctxtBUDAT-HIGH").SetFocus

session.findById("wnd[0]/usr/ctxtBUDAT-HIGH").caretPosition = 10

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

session.findById("wnd[0]/tbar[1]/btn[48]").press

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").setCurrentCell -1, "MENGE"

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectColumn "MENGE"

session.findById("wnd[0]/tbar[1]/btn[19]").press

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").setCurrentCell -1, "MENGE"

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectColumn "MENGE"

session.findById("wnd[0]/tbar[1]/btn[25]").press

session.findById("wnd[0]/tbar[1]/btn[25]").press

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/btnAPP_FL_SING").press

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/btnAPP_WL_SING").press

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER1_SORT/shellcont/shell").currentCellRow = 17

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER1_SORT/shellcont/shell").firstVisibleRow = 6

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER1_SORT/shellcont/shell").selectedRows = "17"

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/btnAPP_WL_SING").press

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER2_SORT/shellcont/shell").currentCellColumn = "SUBTOT"

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER2_SORT/shellcont/shell").selectedRows = "0"
session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER2_SORT/shellcont/shell").clickCurrentCell
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/mbar/menu[0]/menu[1]/menu[2]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "export.xls"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 10
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press
End Sub
 
Moderatör tarafında düzenlendi:

OrkmesB

Administrator
Yönetici
Admin
#2
Destina, biraz detay verir misin?
Hata nereden geliyor, hata kodu nedir şeklinde.
Verileri nereden çekiyorsun vs.
Bunları bilmeden destek olmak biraz zorlaşıyor.
 

saccilarlid

New member
PVM
#3
Merhaba,
"run time error '424'. Object required" hatası veriyor
Verileri SAP'den çekiyorum, transaction bölümünden mb51'den çekiyorum günlük üretim datasını.
 

metehan8001

Moderator
Yönetici
Moderatör
#4
Merhaba, öncelikle makronun Sub adını değiştirin, çünkü (mb51) hücre adı olduğu zamanda hata verir.
Düzelmez ise hangi satırda hata verdiğini de yazın.
 

OrkmesB

Administrator
Yönetici
Admin
#5
@metehan8001 Destina ile aynı yerde çalışıyoruz.
SAP bağlantısı için bir connection var sanırım, o kısım set edilirken hata veriyor.
Ben hiç SAP kullanmadığım için nesneyi bulamadım tanımlamak ya da create etmek için.
Bilgin varsa o kısma bakmak gerek.
 

metehan8001

Moderator
Yönetici
Moderatör
#6
Bağlantı kodu aşağıdaki gibi olmalı, bende SAP çok aktif kullanan biriyim.
Kod:
If Not IsObject(SAPApp) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set SAPapp = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = SAPApp.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 SAPApp, "on"
End If
 
Son düzenleme:

saccilarlid

New member
PVM
#7
Merhaba, aşağıdaki kod ile ben hızlıca indirmeyi başardım.
Burda da paylaşmak istedim. :)
Kod:
Sub Sap()

Set WshShell = CreateObject("WScript.Shell")

Set proc = WshShell.Exec("C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe")

   Set SapGui = GetObject("SAPGUI")

Set Appl = SapGui.GetScriptingEngine

Set Connection = Appl.OpenConnection("PR2 ( CANLI )")

Set session = Connection.Children(0)

session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "KULLANICI ADI"

session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "şifre"

session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "TR"

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]").maximize

session.findById("wnd[0]/tbar[0]/okcd").Text = "mb51"

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/usr/ctxtMATNR-LOW").Text = "1000000"

session.findById("wnd[0]/usr/ctxtMATNR-HIGH").Text = "9000000"

session.findById("wnd[0]/usr/ctxtBWART-LOW").Text = "101"

session.findById("wnd[0]/usr/ctxtBWART-HIGH").Text = "102"

session.findById("wnd[0]/usr/ctxtBUDAT-LOW").Text = InputBox(" Hoşgeldiniz, Lütfen dd.mm.yy olacak şekilde başlangıç tarihini giriniz")

session.findById("wnd[0]/usr/ctxtBUDAT-HIGH").Text = InputBox("Lütfen dd.mm.yy olacak şekilde bitiş tarihini giriniz")

session.findById("wnd[0]/usr/ctxtBUDAT-HIGH").SetFocus

session.findById("wnd[0]/usr/ctxtBUDAT-HIGH").caretPosition = 10

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

session.findById("wnd[0]/tbar[1]/btn[48]").press

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").setCurrentCell -1, "MENGE"

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectColumn "MENGE"

session.findById("wnd[0]/tbar[1]/btn[19]").press

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").setCurrentCell -1, "MENGE"

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectColumn "MENGE"

session.findById("wnd[0]/tbar[1]/btn[25]").press

session.findById("wnd[0]/tbar[1]/btn[25]").press

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/btnAPP_FL_SING").press

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/btnAPP_WL_SING").press

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER1_SORT/shellcont/shell").currentCellRow = 17

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER1_SORT/shellcont/shell").firstVisibleRow = 6

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER1_SORT/shellcont/shell").selectedRows = "17"

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/btnAPP_WL_SING").press

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER2_SORT/shellcont/shell").currentCellColumn = "SUBTOT"

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER2_SORT/shellcont/shell").selectedRows = "0"

session.findById("wnd[1]/usr/subSUB_DYN0500:SAPLSKBH:0610/cntlCONTAINER2_SORT/shellcont/shell").clickCurrentCell

session.findById("wnd[1]/tbar[0]/btn[0]").press

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

session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").Select

session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").SetFocus

session.findById("wnd[1]/tbar[0]/btn[0]").press

session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "C:\Users\saccilarcid\Desktop\Daily MB51 Report"

session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "export.xls"

session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 10

session.findById("wnd[1]/tbar[0]/btn[0]").press

session.findById("wnd[0]/tbar[0]/btn[3]").press

session.findById("wnd[0]/tbar[0]/btn[3]").press

session.findById("wnd[0]/tbar[0]/btn[3]").press
End Sub
 
Moderatör tarafında düzenlendi:

metehan8001

Moderator
Yönetici
Moderatör
#8
Merhaba benim de kullanmış olduğum bağlantı türü aşağıdaki gibidir. Bağlantılarda bunu kullanmaktayım.
Belki biliyorsunuzdur faydalan olur diye yazayım. Kod içerisinde SAP penceresini simge durumuna alma ve oturumu kapatma SAP çıkış kodlarıda mevcuttur.

Kod:
kontrol = MsgBox("Oturum Açık mı, Şifre girdiniz mi" & vbCr & vbCr & "OTURUM AÇIK MI", vbInformation + vbYesNo, "OTURUM AÇIK MI")
If kontrol = vbNo Then
 
    Set WSHShell = CreateObject("WScript.Shell")
    If IsObject(WSHShell) Then
      Rem Set the path to the SAP GUI directory
        SAPGUIPath = "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\"
      Rem Set the SAP system ID
        SID = "10.80.1.86"
      Rem Set the instance number of the SAP system
        InstanceNo = "00"
      Rem Starts the SAP GUI
        WSHShell.Exec SAPGUIPath & "SAPgui.exe " & SID & " " & _
          InstanceNo
      Rem Set the title of the SAP GUI window here
        WinTitle = "ERP"
'      While Not WSHShell.AppActivate(WinTitle)
Application.Wait Now + TimeValue("0:00:03")
' sleep 250
'      Wend
      Set WSHShell = Nothing
    End If
End If
 
If Not IsObject(sapapplication) Then
On Error GoTo acik
   Set SapGuiAuto = GetObject("SAPGUI")
   Set sapapplication = SapGuiAuto.GetScriptingEngine
End If
On Error GoTo ders
If Not IsObject(Connection) Then
   Set Connection = sapapplication.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 sapapplication, "on"
End If
 
'session.findById("wnd[0]").maximize ' TAM EKRAN YAPAR
session.findById("wnd[0]").iconify ' SİMGE DURUMUNA ALIR
 
If kontrol = vbNo Then
On Error GoTo kul
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "kullanıxı"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "sıfre"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").SetFocus
session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 6
session.findById("wnd[0]").sendVKey 0
Else
session.findById("wnd[0]/tbar[0]/btn[12]").press
session.findById("wnd[0]/tbar[0]/btn[12]").press
session.findById("wnd[0]/tbar[0]/btn[12]").press
On Error GoTo 0
End If
On Error GoTo 0
 
'
''
''' KODLARINIZ.......
''
'
 
session.findById("wnd[0]/tbar[0]/btn[12]").press
session.findById("wnd[0]/tbar[0]/btn[12]").press
session.findById("wnd[0]/tbar[0]/btn[12]").press
 
'OTURUMU KAPATIP ÇIKIŞ YAPMAK İÇİN
If MsgBox("SAP oturumu kapatılsın mı", vbInformation + vbYesNo, "Oturum Kapatılsın mı ?") = vbYes Then
session.findById("wnd[0]/tbar[0]/btn[15]").press
session.findById("wnd[0]/tbar[0]/btn[15]").press
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press ' ÇIKIŞ BUTONUNU ONAYLAMA
End If
 
 
MsgBox "İşlem Tamam" & vbCr & vbCr & "www.ExcelDepo.Com", vbExclamation + vbMsgBoxRtlReading, "İşlem TAMAM"
Exit Sub
kul:
MsgBox "Oturumu KAPATIN Veya Soruya EVET demediniz.", vbCritical, "Oturumu KAPAT"
Exit Sub
ders:
MsgBox "GİRİŞ EKRANI ERB AÇIK DEĞİL", vbCritical, "ERB AÇIK DEĞİL"
Exit Sub
acik:
MsgBox "SAP  AÇIK DEĞİL", vbCritical, "SAP PROGRAMI KAPALI"
Exit Sub
 
Üst