Macromdaki Hata için Yardım

Katılım
5 Ocak 2024
Mesajlar
8
Excel Vers. ve Dili
excel
Merhabalar ,
Eklediğim macromda bir hata alıyorum , Sap progrmaından excel dosyasını çektiriyorum fakat excel açılırken bekleme yaptığı için benim altı çizili kodumun orası hata veriyor , Application.Wait Now + TimeValue("00:00:05") Bu kodu ekleyip tuketim export excelimin acılmasını bekliyorum fakat excel acılmadan sayıyor excel tam açılacakken yine hata veriyor , yani sizden ricam açılan exceldeki(tuketim_export) M sutunun son sutununu alıp aylık hedef dosyasındaki belirli bir sutuna yapıstırmak istiyorum, kodların öncesini koymadım çünkü öncesi takır takır çalışmakta. Yapamadığım yer altı çizili olan bölümdür. Kısacası kodlarımın Tüketim_Export excelini açılmasını beklemesini istiyorum sonrası zaten düz kopyala yapıştır kodları oluyur. Şimdiden yardımlarınız için tesekkür ederim.




session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/btn[3]").press
session.findById("wnd[0]/tbar[0]/okcd").Text = "178"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtS_WERKS-LOW").Text = "128888"
session.findById("wnd[0]/usr/ctxtS_WERKS-LOW").SetFocus
session.findById("wnd[0]/usr/ctxtS_WERKS-LOW").caretPosition = 4
session.findById("wnd[0]/usr/btn%_S_MDV01_%_APP_%-VALU_PUSH").press
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,0]").Text = "w1"
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,1]").Text = "w2"
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,2]").Text = "w3"
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,2]").SetFocus
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,2]").caretPosition = 4
session.findById("wnd[1]/tbar[0]/btn[8]").press
session.findById("wnd[0]/usr/ctxtS_BUDAT-LOW").Text = carrid
session.findById("wnd[0]/usr/ctxtS_BUDAT-HIGH").Text = carrid1
session.findById("wnd[0]/usr/ctxtS_BUDAT-HIGH").SetFocus
session.findById("wnd[0]/usr/ctxtS_BUDAT-HIGH").caretPosition = 10
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/tbar[1]/btn[16]").press
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "C:\\SAPGUI"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "TUKETIM_EXPORT.XLSX"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 8
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[11]").press


Windows("TUKETIM_EXPORT.XLSX").Activate
Range("M" & Rows.Count).End(xlUp).Select
Selection.Copy
Windows("AYLIK HEDEF.xlsm").Activate
Sheets("2024 ARALIK").Select
Range("B4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False




End Sub
 
Son düzenleme:

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
1,143
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Merhaba! SAP'den Excel'e veri aktarımı sonrası oluşan bekleme (lag) problemini çözmek ve makronuzun TUKETIM_EXPORT.XLSX dosyasının tamamen açılmasını beklemesini sağlamak için, Application.Wait yerine daha güvenilir bir yöntem olan Excel nesnesinin oluşturulup açılan dosyanın kontrol edilmesi gereklidir.

Hatanızın sebebi, Application.Wait kodunun sadece bir zaman sayacı olması ve Excel'in gerçekten açılıp açılmadığını kontrol etmemesidir. SAP, dosyayı dışarı aktarır, ancak Excel'in dosyayı diske yazıp, açıp ve hazır hale gelmesi bu 5 saniyelik süreden farklılık gösterebilir.

Aşağıdaki kod bloğunu, mevcut makronuzdaki altı çizili olan bölümün (Windows("TUKETIM_EXPORT.XLSX").Activate satırı ve sonrası) yerine yapıştırın.

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

' --- Burası altı çizili bölüme karşılık gelen, güncellenmiş kod bloğu ---

Dim wsHedef As Worksheet
Dim wbTuketim As Workbook
Dim lSonSatir As Long
Dim sDosyaAdi As String
Dim iTry As Integer

sDosyaAdi = "TUKETIM_EXPORT.XLSX"

iTry = 0
Do While wbTuketim Is Nothing And iTry < 60
    On Error Resume Next
    Set wbTuketim = Workbooks(sDosyaAdi)
    On Error GoTo 0

    If wbTuketim Is Nothing Then
        Application.Wait Now + TimeValue("00:00:01")
        iTry = iTry + 1
    End If
Loop


If Not wbTuketim Is Nothing Then
    
    wbTuketim.Activate
    
    ' Verinin olduğu ilk sayfayı varsayıyoruz
    ' Eğer sayfa adı belliyse: Set wsTuketim = wbTuketim.Sheets("SayfaAdı") kullanın
    With wbTuketim.Sheets(1)
        
        lSonSatir = .Cells(.Rows.Count, "M").End(xlUp).Row
        
        .Range("M1:M" & lSonSatir).Copy
    End With
    
    Windows("AYLIK HEDEF.xlsm").Activate
    Set wsHedef = ThisWorkbook.Sheets("2024 ARALIK")
    
    wsHedef.Range("B4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    
    wbTuketim.Close SaveChanges:=False
    
Else
    
    MsgBox "Hata: 'TUKETIM_EXPORT.XLSX' dosyası belirtilen sürede (60 saniye) açılamadı.", vbCritical
End If

' --- Güncellenmiş kod bloğu sonu ---

End Sub
Bu güncellenmiş kod ile makronuz, SAP'den gelen Excel dosyasını gerçekten hazır olana kadar bekleyecek ve kopyalama/yapıştırma işlemini hatasız bir şekilde tamamlayacaktır.
 
Katılım
5 Ocak 2024
Mesajlar
8
Excel Vers. ve Dili
excel
Merhaba! SAP'den Excel'e veri aktarımı sonrası oluşan bekleme (lag) problemini çözmek ve makronuzun TUKETIM_EXPORT.XLSX dosyasının tamamen açılmasını beklemesini sağlamak için, Application.Wait yerine daha güvenilir bir yöntem olan Excel nesnesinin oluşturulup açılan dosyanın kontrol edilmesi gereklidir.

Hatanızın sebebi, Application.Wait kodunun sadece bir zaman sayacı olması ve Excel'in gerçekten açılıp açılmadığını kontrol etmemesidir. SAP, dosyayı dışarı aktarır, ancak Excel'in dosyayı diske yazıp, açıp ve hazır hale gelmesi bu 5 saniyelik süreden farklılık gösterebilir.

Aşağıdaki kod bloğunu, mevcut makronuzdaki altı çizili olan bölümün (Windows("TUKETIM_EXPORT.XLSX").Activate satırı ve sonrası) yerine yapıştırın.

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

' --- Burası altı çizili bölüme karşılık gelen, güncellenmiş kod bloğu ---

Dim wsHedef As Worksheet
Dim wbTuketim As Workbook
Dim lSonSatir As Long
Dim sDosyaAdi As String
Dim iTry As Integer

sDosyaAdi = "TUKETIM_EXPORT.XLSX"

iTry = 0
Do While wbTuketim Is Nothing And iTry < 60
    On Error Resume Next
    Set wbTuketim = Workbooks(sDosyaAdi)
    On Error GoTo 0

    If wbTuketim Is Nothing Then
        Application.Wait Now + TimeValue("00:00:01")
        iTry = iTry + 1
    End If
Loop


If Not wbTuketim Is Nothing Then
  
    wbTuketim.Activate
  
    ' Verinin olduğu ilk sayfayı varsayıyoruz
    ' Eğer sayfa adı belliyse: Set wsTuketim = wbTuketim.Sheets("SayfaAdı") kullanın
    With wbTuketim.Sheets(1)
      
        lSonSatir = .Cells(.Rows.Count, "M").End(xlUp).Row
      
        .Range("M1:M" & lSonSatir).Copy
    End With
  
    Windows("AYLIK HEDEF.xlsm").Activate
    Set wsHedef = ThisWorkbook.Sheets("2024 ARALIK")
  
    wsHedef.Range("B4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

  
    wbTuketim.Close SaveChanges:=False
  
Else
  
    MsgBox "Hata: 'TUKETIM_EXPORT.XLSX' dosyası belirtilen sürede (60 saniye) açılamadı.", vbCritical
End If

' --- Güncellenmiş kod bloğu sonu ---

End Sub
Bu güncellenmiş kod ile makronuz, SAP'den gelen Excel dosyasını gerçekten hazır olana kadar bekleyecek ve kopyalama/yapıştırma işlemini hatasız bir şekilde tamamlayacaktır.
Çok teşekkür ederim. Macrom stabil şekilde çalışmaktadır.
 
Üst