Eğitim: E-Defter Yevmiye XML dosyası Excel listesine nasıl çevrilir?

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,332
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Merhabalar;

Bir ihtiyaç nedeniyle modülerlik kazandırdığım E-Defter Yevmiye XML dosyasını Excel listesine çeviren örneğini buraya bırakıyorum.

Örnek kod:

C#:
Option Explicit
'''''''''''''''''''''''''''''''''''''''''''
' Yazar : Zeki Gürsoy                     '
' Mail  : gursoyzeki@gmail.com            '
' Web   : https://zekigursoy.blogspot.com '
' Tarih : 06.09.2024                      '
'''''''''''''''''''''''''''''''''''''''''''
Sub test()
    Dim objDefter   As New DEFTER
    Dim objInfo     As DeftertBilgi
    Dim objMaddeler As Maddeler
    Dim objMadde    As Madde
    Dim objDetaylar As MaddeDetaylar
    Dim objDetay    As MaddeDetay
   
    Dim maddeSay As Long, detaySay As Long, satirSay As Long, i As Long, ii As Long
    Dim t1 As Single, t2 As Single
   
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
   
    t1 = Timer
   
    Range("a1:j1").Value = Array("Yev/Madde Tarihi", "Evrak tarihi", "Yev.No", "Hes.Kodu", "Hes.Adı", "FişNo", _
                                    "SATIR Açıkl.", "FİŞ Açıkl.", "Borç", "Alacak")
                                   
    objDefter.Load ThisWorkbook.Path & "\0123456789-202312-Y-000000.xml"
   
    Set objMaddeler = objDefter.GetMaddeler
   
    maddeSay = objMaddeler.Count
    satirSay = 1
   
    For i = 1 To maddeSay
        Set objMadde = objMaddeler.Item(i - 1)
        Set objDetaylar = objMadde.GetMaddeDetaylari
       
        Application.StatusBar = "Madde: " & i & " / " & maddeSay & " ( " & FormatPercent(i / maddeSay, 0) & " )"
       
        detaySay = objDetaylar.Count
       
        For ii = 1 To detaySay
            satirSay = satirSay + 1
           
            Set objDetay = objDetaylar.Item(ii - 1)
           
            Cells(satirSay, "a") = objMadde.MaddeTarih
            Cells(satirSay, "b") = objDetay.SatirTarih 'Evrak tarihi
            Cells(satirSay, "c") = objMadde.YevmiyeNo
           
            Cells(satirSay, "d").NumberFormat = "@"
            Cells(satirSay, "d") = objDetay.AltHesapKodu
           
            Cells(satirSay, "e") = objDetay.AltHesapAdi
           
            Cells(satirSay, "f").NumberFormat = "@"
            Cells(satirSay, "f") = objMadde.FisNo
           
            Cells(satirSay, "g") = objDetay.SatirAciklamasi
            Cells(satirSay, "h") = objMadde.MaddeAciklamasi
           
            If objDetay.B_A = "B" Then
                Cells(satirSay, "ı") = objDetay.Tutar
            Else
                Cells(satirSay, "j") = objDetay.Tutar
            End If
        Next
       
    Next
   
    Set objDefter = Nothing
   
    t2 = Timer
   
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.StatusBar = False
   
    MsgBox "İşlem tamam." & vbCrLf & "Süre: " & FormatNumber(t2 - t1) & " saniye.", vbInformation
End Sub
İndir : E-Defter.xlsb

253571

.
 

Ekli dosyalar

Son düzenleme:

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
503
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Muhasebeciler adına teşekkürler.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,136
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Zeki Bey,

Elinize sağlık. Paylaşımınız için teşekkürler.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Zeki bey elinize sağlık.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Zeki bey yevmiye no alanına fiş numarasını getiriyor. Kendimde buna benzer bir çalışma hazırlamıştım,MSXML2.DOMDocument60 nesnesi ile çok daha hızlı sonuç alınıyor.
 

Ekli dosyalar

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,332
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Erdem Bey, bu ve bunun gibi değişiklikleri "MaddeDetay" isimli Class module içerisinde yapabilirsiniz. Ters olmuş sanırım...

Eğer ihtiyaç varsa; EvrakNo kısmını da yine aynı sınıf içinde, ilgili path' i yazarak aynı mantıkla alabilirsiniz.

Modüler kodlar, operasyon kodunun daha kısa, temiz, okunabilir ve her yerde aynı şekilde kullanılabilir olmasını sağlar. Her zaman tavsiye ederim bu arada...

.
 

mars2

Altın Üye
Katılım
2 Eylül 2004
Mesajlar
557
Excel Vers. ve Dili
2016 - Türkçe
2019 - Türkçe
Altın Üyelik Bitiş Tarihi
26-03-2026
İyi Günler;
Çalışmanızın faydalı olacağı düşüncesiye,
Data sayfasına veri girdiğimde, Mizan sayfasına hesabın toplamını aktarması gerekmiyor mu,
Örneğin;
253584

Mizan sayfasında boş
253585

Acaba, işlemi yaparken yanlışlık yapıldığından dolayı veya excel dosyaının farklı bir klasörde olması gerekmektedir.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,332
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Özet tabloyu yenilediniz mi? Ayrıca, tablonun veri aralığını da kontrol ediin.
 

mars2

Altın Üye
Katılım
2 Eylül 2004
Mesajlar
557
Excel Vers. ve Dili
2016 - Türkçe
2019 - Türkçe
Altın Üyelik Bitiş Tarihi
26-03-2026
Sayın Zeki Gürsoy;
Özet tablo bulunmamaktadır. Bu uygulamadan ayrı bir excel sayfasında bulunan tablosundaki verilerin girilmiş olması mı gerekli midir.
Özet tablo örneğini yayınlamanız mümkün müdür
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,136
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
@mars2 ,

E-Defter makrosunu çalıştırıp sonuç aldıktan sonra özet tablo sayfasına gelip A1 hücresini seçip sağ tıklayıp YENİLE komutunu çalıştırın.

Eğer özet tablo tüm verileri listelemezse #8 nolu mesajdaki adımı izlemelisiniz.
 
Üst