• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Sap ile excel arasında işlemler

  • Konbuyu başlatan Konbuyu başlatan Seli
  • Başlangıç tarihi Başlangıç tarihi
Katılım
22 Şubat 2021
Mesajlar
106
Excel Vers. ve Dili
Ofis 360 Türkçe
Herkese merhaba arkadaşlar,
Ben SAP den veri alıyorum. Script kaydediyorum ancak aldığım veriyi kopyalayamıyorum bu konuda bilgisi olan var mı acaba? Birde girilen tarihin otomatik ayın başı ve sonunu alması için kod yazılabilir mi? Şimdiden teşekkürler, kolay gelsiin herkese..
Kod:
Sub sap2()
Dim application
Dim 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]").resizeWorkingPane 138, 18, False
session.findById("wnd[0]/tbar[0]/okcd").Text = "MB51"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtWERKS-LOW").Text = "1611"
session.findById("wnd[0]/usr/ctxtLGORT-LOW").Text = "1604"
session.findById("wnd[0]/usr/ctxtBWART-LOW").Text = "311"
session.findById("wnd[0]/usr/ctxtSOBKZ-LOW").Text = "Q"
session.findById("wnd[0]/usr/ctxtSOBKZ-LOW").SetFocus
session.findById("wnd[0]/usr/ctxtSOBKZ-LOW").caretPosition = 1
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtBUDAT-LOW").Text = "01.02.2021"    'tarih kendi girecek
session.findById("wnd[0]/usr/ctxtBUDAT-HIGH").Text = "28.02.2021"
session.findById("wnd[0]/usr/ctxtBUDAT-HIGH").SetFocus
session.findById("wnd[0]/usr/ctxtBUDAT-HIGH").caretPosition = 10
session.findById("wnd[0]").sendVKey 8
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").setCurrentCell -1, "ERFMG"
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").firstVisibleColumn = "BKTXT"
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectColumn "ERFMG"
session.findById("wnd[0]/tbar[1]/btn[19]").press

'en son press dediği yerde veriyi kopyalayıp excele yapıstırmasını istiyorum'

End Sub
 
Merhaba

NOW() yerine değişkeni kullanırsınız.

Kod:
Aybaşı    DATE(YEAR(NOW());MONTH(NOW());1)
Aysonu    DATE(YEAR(NOW());MONTH(NOW())+1;1)-1
 
NOW() dediğiniz benim yazdığım tarih mi acaba nereye yapmam gerektiğini anlayamadım.. Teşekkürler
 
SAP'nin oluşturduğu raporu zaten excele atan menüleri var. Siz raporu ekranda gördüğünüzde scripti kesmişsiniz. Scriptinizi excele atana kadar devam ettirin.
Tarih sorununuzu da excelden girerek halledebilirsiniz. Excel'in makroyu çalıştırdığınız sayfasına örneğin A1 hücresine ve A2 hücresine başlangıç ve bitiş tarihlerini girin. Aşağıdaki kod satırlarını da aşağıdaki gibi değiştirin.
Kod:
session.findById("wnd[0]/usr/ctxtBUDAT-LOW").Text = [A1]
session.findById("wnd[0]/usr/ctxtBUDAT-HIGH").Text = [A2]

A1 hücresine yazdığınız tarihin o ayın son gününü bulmak için de excelde A2 hücresine yazacağınız

=EOMONTH(A1,0) formülü ile bulabilirsiniz.
 
Son düzenleme:
Hocam şimdi anladım :) Ancak ben bir önceki ayın ilk günü ve son gününü bulmak istiyorum, böyle bir şey mümkün mü?
 
Kod:
Sub sap_veri_al()
Dim application
Dim 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]").resizeWorkingPane 138, 18, False
session.findById("wnd[0]/tbar[0]/okcd").Text = "zpp001"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/btnBTN_KESIMFIRE").press
session.findById("wnd[0]/usr/ctxtP_WERKS").Text = "1611"
session.findById("wnd[0]/usr/ctxtP_WERKS").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtS_ERDAT-LOW").Text = DateSerial(Year(Now), Month(Now) + 1, 0)  'VERİLER EXCELDEN ALINACAK
session.findById("wnd[0]/usr/ctxtS_ERDAT-HIGH").Text = Sheets("Sayfa2").Range("A" & ii).Value   'VERİLER EXCELDEN ALINACAK
session.findById("wnd[0]/usr/ctxtS_ERDAT-HIGH").SetFocus
session.findById("wnd[0]/usr/ctxtS_ERDAT-HIGH").caretPosition = 10
session.findById("wnd[0]").sendVKey 8
session.findById("wnd[0]/tbar[1]/btn[45]").press
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\selcanusta\Desktop\VERİ GİRİŞİ"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "1.xls"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 9
session.findById("wnd[1]/tbar[0]/btn[0]").press
End Sub

Hocam tüm kodum bu şekilde. DateSerial yaptım tarih için VERİLER EXCELDEN alınacak yazdığım kısma ama örneğin bu ayda isem şubat ayının ilk ve son tarihini nasıl yazdırabilirim, mümkünse tabi :) Şimdiden teşekkürler..
 
Diyelim ki A1 hücresinde 05/01/2021 gibi bir tarih var.

Sonraki ayın ilk günü için =EOMONTH(A1,0)+1
Sonraki ayın son günü için =EOMONTH(A1,1) formülünü kullanabilirsiniz.
 
Pardon siz önceki ayı istemişsiz.

Önceki ayın ilk günü için =EOMONTH(A1,-2)+1
Önceki ayın son günü için =EOMONTH(A1,-1) formülünü kullanabilirsiniz.
 
Hocam sorun şu ki A1 de öyle bir şey yazmıyor :) Sayfayı saptan veri alınca oluşturuyor o yüzden ben sayfaya bir şey yazamıyorum, ama sayfaya yazdıracak kodu biliyorsanız o şekilde yapabilirim,
 
Siz bu makroyu nereden çalıştırıyorsunuz. Bir excel dosyasından çalıştırmıyor musunuz?
Tarihleri makronun bulunduğu excel sayfasından almalı. Tarihle ilgili formülleri de bu excel sayfasından nereden almasını istiyorsanız oraya yazmalısınız. Ben A1 hücresini size örnek olması açısından kullandım.
Eğer makroyu çalıştırdığınız dosyayı eklerseniz yardımcı olabilirim.
 
Hocam dosya nasıl ekleyebilrim göremedim
 
https://dosya.co/ gibi harici bir siteye dosyanızı yükleyip linkini paylaşın. Altın üye olmadığınız için kendiniz dosya ekleyemezsiniz.
 

Hocam bu şekilde koduda içinde, eğer denediğim gibi kodla ayın ilk günü ve son gününü yazdırabilirsek çok iyi olur..
 
Çok teşekkür ederim hocam..
 
Geri
Üst