Sap ile excel arasında işlemler

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
 
Katılım
15 Mart 2005
Mesajlar
380
Excel Vers. ve Dili
Microsoft 365 En 64 Bit
Altın Üyelik Bitiş Tarihi
20-03-2024
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
 
Katılım
22 Şubat 2021
Mesajlar
106
Excel Vers. ve Dili
Ofis 360 Türkçe
NOW() dediğiniz benim yazdığım tarih mi acaba nereye yapmam gerektiğini anlayamadım.. Teşekkürler
 

bmutlu966

Altın Üye
Katılım
26 Ocak 2006
Mesajlar
756
Excel Vers. ve Dili
Office 365 İngilizce 64 Bit
Altın Üyelik Bitiş Tarihi
31-01-2025
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:
Katılım
22 Şubat 2021
Mesajlar
106
Excel Vers. ve Dili
Ofis 360 Türkçe
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ü?
 
Katılım
22 Şubat 2021
Mesajlar
106
Excel Vers. ve Dili
Ofis 360 Türkçe
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..
 

bmutlu966

Altın Üye
Katılım
26 Ocak 2006
Mesajlar
756
Excel Vers. ve Dili
Office 365 İngilizce 64 Bit
Altın Üyelik Bitiş Tarihi
31-01-2025
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.
 

bmutlu966

Altın Üye
Katılım
26 Ocak 2006
Mesajlar
756
Excel Vers. ve Dili
Office 365 İngilizce 64 Bit
Altın Üyelik Bitiş Tarihi
31-01-2025
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.
 
Katılım
22 Şubat 2021
Mesajlar
106
Excel Vers. ve Dili
Ofis 360 Türkçe
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,
 

bmutlu966

Altın Üye
Katılım
26 Ocak 2006
Mesajlar
756
Excel Vers. ve Dili
Office 365 İngilizce 64 Bit
Altın Üyelik Bitiş Tarihi
31-01-2025
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.
 
Katılım
22 Şubat 2021
Mesajlar
106
Excel Vers. ve Dili
Ofis 360 Türkçe
Hocam dosya nasıl ekleyebilrim göremedim
 

bmutlu966

Altın Üye
Katılım
26 Ocak 2006
Mesajlar
756
Excel Vers. ve Dili
Office 365 İngilizce 64 Bit
Altın Üyelik Bitiş Tarihi
31-01-2025
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.
 
Katılım
22 Şubat 2021
Mesajlar
106
Excel Vers. ve Dili
Ofis 360 Türkçe

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..
 

bmutlu966

Altın Üye
Katılım
26 Ocak 2006
Mesajlar
756
Excel Vers. ve Dili
Office 365 İngilizce 64 Bit
Altın Üyelik Bitiş Tarihi
31-01-2025
Makro kodlarınızı excelden alacak şekilde düzenledim. Deneyin. Ayrıca bir tablo olarak da ayların başlangıç ve bitiş tarihlerini formül kullanarak gösterdim.

2021 Kesim Fire Raporu.xlsm - 166 KB
 
Katılım
22 Şubat 2021
Mesajlar
106
Excel Vers. ve Dili
Ofis 360 Türkçe
Çok teşekkür ederim hocam..
 
Üst