[VBA] Klasörden birden fazla xml,xls,xlsx nasıl toplu veri alabilirim
#1
Bir kalsörüm var içerisinde bazen hiç dosya olmayabilir 1 dosya olabilir veya birçok aynı türde
xml,xls,xlsx dosya olabilir (xls,xlsx aynı klasörde) olur.Ekli resim ve aşağıdaki kod ile bu dosyayı okuyup bir klasöre kaydediyorum.

Senaryom şu şekilde Şirket Seçimi-Gözat-Açılan Klasörden dosya seç-Şirket seçimine göre altta çıkan butona tıkla bilgiler tabloya alınınca yüklendi uyarısı verilsin.Bu işlem
klasördeki tüm dosyalar bitene kadar devam ediyor.


Yeni Senaryoda ise Şirket seçimi -Anadolu butonuna Tıklayınca Dosya yolunda bulunan
birden çok dosya okunarak veriler tabloya alınsın tamamlanınca Uyarı versin işlem toplu olarak bir seferde sonuçlansın.

Dosya seçiminden sonra çalışan kodum.

[Resim: dG9Zm4.jpg]
[Resim: Lnjgmj.jpg]
[Resim: 1gRD5j.jpg]
[Resim: gWQVa5.jpg]

Visual Basic
  1. Sub xmlimport()
  2. On Error Resume Next
  3. Dim xmlDom As New MSXML2.DOMDocument
  4. Dim xmlrow As MSXML2.IXMLDOMNode
  5. Dim xmlcol As MSXML2.IXMLDOMNode
  6. Dim xmlaa As MSXML2.IXMLDOMNode
  7. Dim rs As New ADODB.Recordset
  8. Dim i, k, x, t As Integer
  9. Dim policekod As Long
  10.  
  11. xmlDom.Load Me.kaynak_dosya.Value 'dosyayı yüklüyoruz..
  12.  
  13. rs.Open "POLİÇE", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  14. rs.AddNew
  15.  
  16. For Each xmlrow In xmlDom.documentElement.ChildNodes
  17.  
  18. For i = 0 To rs.Fields.Count - 1 ' alan adlarına göre kayıtlar yerleştiriliyor..
  19. If rs(i).Name = xmlrow.nodeName Then
  20. If xmlrow.nodeName = "PoliçeNumarası" Then policekod = xmlrow.Text 'poliçe numarasını alınıyor
  21. rs(i) = xmlrow.Text
  22. rs.Update
  23. End If
  24. Next
  25. Next
  26.  
  27. Dim rsm As New ADODB.Recordset
  28. Dim rsa As New ADODB.Recordset
  29. Dim rsarc As New ADODB.Recordset
  30. rsm.Open "MÜŞTERİ", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  31. rsa.Open "ADRESİ", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  32. rsarc.Open "ARAÇ", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  33. rsm.AddNew
  34. rsa.AddNew
  35. rsarc.AddNew
  36.  
  37. For Each xmlrow In xmlDom.documentElement.ChildNodes
  38.  
  39. For Each xmlcol In xmlrow.ChildNodes
  40.  
  41. If xmlrow.nodeName = "MÜŞTERİ" Then
  42.  
  43. For k = 0 To rsm.Fields.Count - 1
  44.  
  45. If k = 0 Then rsm(0) = policekod
  46. If rsm(k).Name = xmlcol.nodeName Then
  47. rsm(k) = xmlcol.Text
  48. rsm.Update
  49. End If
  50.  
  51. Next
  52.  
  53.  
  54. For Each xmlaa In xmlcol.ChildNodes
  55.  
  56. If xmlcol.nodeName = "ADRESİ" Then
  57. For x = 0 To rsa.Fields.Count - 1
  58. If x = 0 Then rsa(0) = policekod
  59. If rsa(x).Name = xmlaa.nodeName Then
  60. rsa(x) = xmlaa.Text
  61. rsa.Update
  62. End If
  63.  
  64. Next x
  65. End If
  66. Next xmlaa
  67.  
  68.  
  69. End If
  70.  
  71.  
  72. If xmlcol.nodeName = "ARAÇ" Then
  73.  
  74. For Each xmlaa In xmlcol.ChildNodes
  75. Debug.Print xmlaa.nodeName, "=", xmlaa.Text
  76. For t = 0 To rsarc.Fields.Count - 1
  77. If t = 0 Then rsarc(0) = policekod
  78. If rsarc(t).Name = xmlaa.nodeName Then
  79. rsarc(t) = xmlaa.Text
  80. rsarc.Update
  81. End If
  82.  
  83. Next t
  84.  
  85.  
  86. Next
  87. End If
  88.  
  89.  
  90.  
  91.  
  92. Next xmlcol
  93. Next xmlrow
  94.  
  95. rs.Close
  96. rsm.Close
  97. rsa.Close
  98. stDocName = "ANADOLUSOR"
  99. DoCmd.OpenQuery stDocName, acNormal, acEdit
  100.  
  101. CurrentDb.Execute "DELETE * FROM [POLİÇE] "
  102. Kill Me.kaynak_dosya
  103.  
  104. stDocName = "CariTransfer"
  105. DoCmd.OpenQuery stDocName, acNormal, acEdit
  106. CurrentDb.Execute "DELETE * FROM [TRANSFER] "
  107. MsgBox "Anadolusigorta Verileri Yüklenmiştir."
  108.  
  109. End Sub




Eklenti Dosyaları
.jpg   1.JPG (Boyut: 38,25 KB / İndirilme: 70)
.jpg   2.JPG (Boyut: 94,33 KB / İndirilme: 58)
.jpg   3.JPG (Boyut: 30,39 KB / İndirilme: 73)
.jpg   4.JPG (Boyut: 36,44 KB / İndirilme: 73)



  Alıntı
Bu mesajı beğenenler:
#2
Dosya secimini islemini coklu dosya secimi ile liste kutusuna secilenlerin aktarilmasi ile sizin VBA kodunuz revize edilebilir. Resim yerine ilgili forma ait access dosyanizi eklemeniz daha fazla yardim almanizi saglayabilir.



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  [SORGU] Birden Fazla Sorguyu Tek Ekranda Görebilme MERAK 1 266 03-11-2025, 08:27
Son Mesaj: dsezgin
  [VBA] Birden çok Seçenek Seçili Alandaki Verileri Kopyalama evidi 9 636 26-02-2025, 17:36
Son Mesaj: evidi
  Sorguda Birden Fazla Ifadeli Sütunu Toplatma halil.tefci 8 742 03-12-2024, 15:01
Son Mesaj: dsezgin
  [SORGU] çarpraz Sorguda Sütun Değeri Olarak Birden çok Alan Seçebilir Miyiz? abkbek 2 409 13-08-2024, 21:18
Son Mesaj: abkbek
  Access Formu üzerinden Sql Server Tabloya Nasıl Veri Kaydı Yapılır karacahil 4 667 15-02-2024, 12:10
Son Mesaj: halily
  Birden Fazla Alandaki Veriyi Sorguda Alt Alta Birleştirme adnnfrm 3 648 18-11-2023, 19:54
Son Mesaj: dsezgin
  Etiket Isimlerini Toplu Değiştirme hedefkaya 1 342 24-10-2023, 21:06
Son Mesaj: dsezgin
  Toplu .csv, .xlsx, .xls, .xml Dosya Aktarımı Yapmak adnnfrm 2 575 22-06-2023, 19:04
Son Mesaj: dsezgin

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar):