Favorilerine Ekle | Giriş Sayfan Yap | Tavsiye Et

 

Kurs Tanıtım Sayfası | Süper Üye Kimdir? | Menü Tasarımı Konulu Örnek Ders
Kod İndir| Hazır Kodlar | Makaleler| İpuçları | VB .NET Kursu | Dersler | Forum | Alt Bölümler | Servisler
    Merhaba Misafir
    anasayfa » visual basic makaleleri » Kullanıcı Yönlendirme ile Excel'den Uygulamanızın Veritabanına Kayıt Aktarma
Üye Girişi
Kullanıcı Adı:  
Şifre : 
Kaydet ?
Siteden tam olarak faydalanabilmek için üye olmalısınız.
Unuttuğunuz şifrenizi öğrenebilmek için kayıt sırasında verdiğiniz Hatırlatma Cevabı'nı bilmeniz gereklidir.
Şifre hatırlatma işlevini sadece 3 defa kullanma hakkınız vardır.
Kullanıcı adını ve şifresini unutan üyelere email ile yardım verilmez.

Aktivasyon Gelmedi mi?Aktivasyon mesajınız email adresinize gelmedi mi?
Buraya tıklayarak bir kez daha aktivasyon mesajı gönderilmesini sağlayabilirsiniz.
Lütfen email hesabınızın BULK ve SPAM klasörlerini de kontrol ediniz.
Rastgele Makale

Verilen kelimeleri alfabetik olarak sıralama

Yazar: Radyo

Webmasterlar
Sitenize Ekleyin!
Sitenizde "Son Eklenen 10 Visual Basic Yazısı"'nı göstermek ve içeriğini zenginleştirmek için buraya tıklayınız.

Vbasicmaster.com'a link verin!
Aşağıdaki minik banneri sitenize eklemek için tıklayın!

Üye Sayısı:
Ziyaretçiler nerede?
Yayın № : 9267
Yayın Tar:20.08.2007
Yazar : epikuros
Hit :4142

Bu Yazarın Yazıları Sadece bu yazarın makale göster
Bu Yazıyı Tavsiye Et

Kullanıcı Yönlendirme ile Excel'den Uygulamanızın Veritabanına Kayıt Aktarma
Normal durumda Access'e Excel'den veri aktarmak için Access Veritabanının Dosya Menüsünden Dış Veri Al>Al seçenekleri ile açılan pencereden, dosya tipini Excel'e çevirerek seçim yaparsınız ve Access sizi verilerin aktarılması konusunda yönlendir. Bir uygulama hazırladığınızda, veri giriş sayfanız varsa ve kullanıcı aynı anda bir sürü veri girişi yapacaksa, kullanıcıdan bunları tek tek uygulama pencerenizden girmesini, yada Access veritabanınızı açarak yukarıdaki gibi Excel'de kayıtlı verilerini aktarmasını bekleyemezsiniz. Aşağıda Access'in yönlendirmesine benzer bir yönlendirme ile kullanıcıya bu işin nasıl yaptırılabileceğinin küçük bir örneği var. Tasarım ve kodlama çok basit. Dolayısıyla geliştirilmeye açık.

Ön Bilgiler:
Uygulamanın bu bölümünün amacı, Access veritabanı ile bağlantılı çalışan ana uygulamamıza kullanıcının bir Excel dosyasında listelediği öğrenci bilgilerini veritabanımıza aktarmak. Bu yüzden deneme yapmadan önce bir veritabanımızın olması gerektiği açık. Buradaki veritabanı uygulamanın bulunduğu klasörde açılmış Veri adlı klasör içerisinde saklanan vtÖSS adlı Access veritabanı. Veritabanının kullanılan tablosu tblÖgrenciBilgileri (Şekil1). Yeniden tasarlamak isterseniz, bu tablonun alanlarını ve alan özelliklerini Şekil2'de görebilirsiniz.



Şekil 1



Şekil 2

Form
FormName : frmExcel
FormCaption : EXCEL'den öğrenci aktarımı
BorderStyle : 1-Fixed Single
Form Kontrolleri
Forma 1 SStab ve 1 PictureBox yerleştiriyoruz. Özellik ayarlamalarını aşağıda gösterildikleri şekilde yapıyoruz.
**************************************
1) SSTab (Properties)
Tabs : 4
TabsPerRow : 4
TabOrientation : 1-ssTabOrientationBottom

Tab1 (Tabların Captionlarının çok önemi yok)
Caption : ?DOSYAYOLU?
Tab2
Caption : ?ALANLAR?
Tab3
Caption : ?KONTROL?
Tab4
Caption : ?AKTARMA?

Tab1 Üzerine 1 Label, 1 TextBox, 1 CommandButton ve 1 CommonDialog yerleştiriyoruz (Şekil3).
Label1 Caption : ?Aşağıdaki alana verilerinizin bulunduğu Excel dosyasının yolunu girin yada GÖZAT butonu ile açılacak pencereden seçim yapın...?
Label1 FontSize : 12

TextBox Name : txtYol

CommandButton Name : cmdGözat
CommandButton Caption : ?Gözat?

CommonDialog Name : Common


Şekil 3

Tab2 üzerine 1 CheckBox, 2 ComboBox, 2 MSFlexGrid, 2 CommandButton yerleştiriyoruz (Şekil4).
ChechBox Name : chkSütunBaşı
CheckBox Caption : ?İlk satır sütun başlıklarını içeriyor?

MSFlexGrid1 Name : grdExcel
MSFlexGrid1 Rows : 5
MSFlexGrid1 Cols : 3
MSFlexGrid1 FixedCols : 0
MSFlexGrid1 FixedRows : 0
MSFlexGrid1 Selection Mode : 2-By Column

MSFlexGrid1 Name : grdEşleme
MSFlexGrid1 Rows : 2
MSFlexGrid1 Cols : 4
MSFlexGrid1 FixedCols : 0
MSFlexGrid1 FixedRows : 1
MSFlexGrid1 Selection Mode : 0-Free

Command1 Name : cmdBağla
Command1 Caption : ?Bağla?
Command2 Name :cmdAtla
Command2 Caption : ?Sütun Atla?


Şekil 4

Tab3 üzerine 4 Label, 2 ListBox ve 1 CheckBox yerleştiriyoruz (Şekil5).
1.Label Caption (Label2) : ?Excel sütunlarındaki bilgiler, aşağıda yeniden gösterilmiş olan eşleştirmelerinize göre veritabanına aktarılacaktır. Lütfen eşleştirmelerinizi dikkatlice kontrol ediniz. yanlışlık yaptığınızı düşünüyorsanız, "<Geri" butonunu tıklayarak gerekli düzeltmeyi yapınız. Eşleştirmelere onay veriyorsanız Onay kutusunu işaretledikten sonra "İleri>" butonunu tıklayınız."
1.Label (Label2) FontSize : 10
2.Label (Label3) Caption : ?Dikkat ! Yanlış eşleştirmelerde tüm verileriniz yanlış alanlara aktarılabilecek, yada işlem tamamlanamayacaktır.?
3.Label (Label4) Caption : ?Excel Sütunları?
4.Label (Label5) Caption : ?Veri Alanları?

ListBox'ları dizi olark ayarlıyoruz.
ListBox1 Name : lstEşleme
ListBox1 Index : 0
ListBox2 Name : lstEşleme
ListBox2 Index : 1

CheckBox Name : chkOnay
CheckBox Caption : ?Eşleştirmelerim doğru. Devam edebilirim.?


Şekil 5

Tab4 üzerine 2 Label, 2 ListBox yerleştiriyoruz (Şekil6).
1.Label (Label7) Caption : ?Aktarım başladı?
1.Label (Label7) FontBold : True
2.Label (Label8) Caption : ?Excel dosyanızda listelenmiş olan öğrenci bilgileri, uygulamaya aktarılıyor. Lütfen işlem tamamlanana kadar bekleyiniz...?

1.ListBox Name : lstSütunIndex
1.ListBox Visible : False
2.ListBox Name : lstAlanIndex
2.ListBox Visible : False


Şekil 6
**************************************
2) Picture1 (Properties)
Picture1 Align : 2-Align Bottom
Picture1 üzerine 3 CommandButton yerleştiriyoruz. Ve Bunları bir dizi haline getiriyoruz.
1.Command Name : cmdButon
1.Command Caption : ?<Geri?
1.Command Index : 0
1.Command Visible : False
2.Command Name : cmdButon
2.Command Caption : ?İleri>?
2.Command Index : 1
2.Command Enabled : False
3.Command Name : cmdButon
3.Command Caption : ?İptal?
3.Command Index : 2


Kontrolleri forma yerleştirdikten sonra ilk taba geçiş yapıyoruz (Form açıldığında bu tab ile başlaması için) ve SSTab'ı alttan çekerek PictureBox'ın altına kadar uzatıyoruz. Sonra SSTab üzerinde Mouse ile sağ tıklayarak Send To Back komutunu veriyoruz ki PictureBox, tabımızın başlıklarını kapatsın. (Şekil7)


Şekil 7


İşin esas yorucu ve sıkıcı kısmını atlatmış oluyoruz. Şimdi programın işleyişini ve aşama aşama kodları görebiliriz.
Öncelikle Project>Preferences seçenekleri ile açılan pencereden Microsoft Excel 10.0 Object Library (Sizde Excelin farklı bir versiyonu olabilir, bu durumda örneğin Microsoft Excel 11.0 Object Library gibi bir şey ararsınız. Bendeki Office XP idi).
Sonrasında Formun Option Explicit kısmında gerekli tanımlamaları yapalım. Burada tanımlayacağımız değişkenler, örneğin Formun Load olayında atanan bir değeri, bir ListBox'ın Click olayında kullanmak istediğimizde başvuracağımız değişkenlerdir. Bu değişkeni Form_Load içerisinde tanımlarsak, ona atanan değeri formun (yada başka bir kontrolün) diğer olaylarında kullanamazdık.

Option Explicit
'Tüm form içerisinde farklı yordamlarda aynı şekilde kullanılacak değişkenler tanımlanıyor.
Dim Ex As Excel.Application ?Excel dosyamızı açmamızı sağlayacak tanımlama
Dim DosyaAdi As String ?Excel Dosyamızın tam yolunu bu değişkene atayacağız.
Dim alan(10) As Integer, sr As Long, ilkhücre As String, başvuru As Integer, st As Long
Dim tabNo As Integer
Dim Bağlantı As Connection ?Veritabanı ile bağlantı için.
Dim KayıtSetiÖğrenci As Recordset ?Veritabanındaki bir tabloya bağlantı için.
Dim sqlMetni As String ?Tabloyla bağlantı kurarken oluşturacağımız sorgu metni için.
Dim ExVar As Boolean ?Sistemimizin bir Exel Aplication ataması durumunda True değerini alacak.

1.Aşama : Formun yüklenişi

Private Sub Form_Load()
'Veritabanı bağlantısını kur
1 Set Bağlantı = New ADODB.Connection
2 Bağlantı.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & App.Path & "\Veri\vtÖSS.mdb"
'Kayıtseti oluştur
3 sqlMetni = "SELECT * FROM tblÖgrenciBilgileri WHERE (((tblÖgrenciBilgileri.Okul)='" & Trim(mdlAyar.kurum) & "') AND ((tblÖgrenciBilgileri.ArşivYılı)=" & Trim(mdlAyar.MezuniyetYılı) & ")) ORDER BY Adı;"
4 Set KayıtSetiÖğrenci = New ADODB.Recordset
5 KayıtSetiÖğrenci.Open sqlMetni, Bağlantı, adOpenKeyset, adLockOptimistic
'Tabno değişkenini sıfıra ayarla
6 tabNo = 0
'grdEşleme için biçim ayarları yap
7 grdEşleme.ColWidth(0) = 1450
8 grdEşleme.ColWidth(1) = 1450
9 grdEşleme.ColWidth(2) = 0
10 grdEşleme.ColWidth(3) = 0
11 grdEşleme.CellAlignment = 0
'grdEşleme gridinin başlıklarını ayarla
12 grdEşleme.Row = 0
13 grdEşleme.Col = 0
14 grdEşleme.Text = "Sütun" '1.Sütunun başlığı
15 grdEşleme.Col = 1
16 grdEşleme.Text = "Alan" '2.Sütunun başlığı
'Kayıtsetindeki alanların isimleri eşleşme için Combo2 listesine yazdır
17 Combo2.Clear
18 For i = 1 To KayıtSetiÖğrenci.Fields.Count - 1
19 Combo2.AddItem KayıtSetiÖğrenci.Fields(i).Name
20 Next
End Sub

Aslında kodların ne yaptığı içerisindeki açıklamalarda anlatılıyor. 1. ve 2. satırlarda veritabanımız ile bağlantıyı oluşturuyoruz. 3. Satırda kayıtsetimiz için bir seçme sorgusu oluşturuyor, 4. Satırda kayıtsetimizi tanımlıyor ve 5. satırda da sorgumuzu kullanarak tanımladığımız kayıtsetimizi açıyoruz. Sonrasında grdEşleme için gerekli biçim ve içerik ayarlamalarını yapıyoruz. 9. ve 10. satırlarda görülebileceği üzre grdEşleme gridinde 3. ve 4. sütunları gizliyoruz (Genişliği ?0' yaparak). Çünkü kullanıcı alan eşlemesi sırasında, ekranda o seçtiği alanların textlerini görürken, biz bu gizli olan sütunlara seçilen sütunun Combo index numarası ile seçilen alanın Field index numarasını yazdırıp işlerimizi kolaylaştıracağız.
Alanları gösterebilmek için de kayıtsetinini her bir alanının adını Combo2'ye aktarıyoruz. İlk alan otomatik sayı alanımız olduğundan ve kullanıcı bunun için değer belirleyemeyeceğinden dolayı, ilk alanı (Fields(0)) atlıyoruz. Böylelikle Combo2'deki her elemanın index numarası alan indexinin 1 küçüğü olmuş oluyor.

2.Aşama : Formumuz yüklendikten sonra?
Form yüklendiğinde kullanıcı ekranda, kendisinden, kayıtlarını sakladığı Excel dosyasının tam yolunu ilgili kutucuğa girmesi istenen ilk bölümle karşılaşacaktır. Bu durumda ?Geri? butonu gizli ve ?İleri? butonu da pasiftir. Kullanıcı bir dosya yolu belirlemeden ilerlenemez. Kullanıcı text kutusuna dosyanın tam yolunu kendi girebileceği gibi, Göz at butonu ile açılacak Aç Dialog Penceresinden de yararlanabilir.

Private Sub cmdGözat_Click()
'Tab0 'da dosya seçiminde "Gözat" düğmesi tıklanınca
1 Common.DialogTitle = "Excel dosyasını seç"
2 Common.Filter = "Excel dosyaları|*.xls"
3 Common.InitDir = App.Path
4 Common.ShowOpen
5 txtYol.Text = Common.FileName
End Sub

Görüldüğü gibi kullanıcının karşılaşacağı ?Aç Dialog Penceresi? nin başlığına 1.Satırda istediğimiz bir stringi atıyoruz. 2.satırda seçim için listelenmesini istediğimiz dosya türü için ayarlama yapıyoruz. (Common.Filter ayarlamasındaki ?|' simgesini Alt + 124 tuş kombinasyonu ile oluşturabilirsiniz). 3.Satırda Aç Dialog Penceresi görüntülendiğinde hangi klasöre odaklanacağını belirliyoruz. Burada biz uygulamamızın olduğu klasöre odaklanmasını istedik. Sonrasında kullanıcının seçtiği dosyanın tam yolunu text kutumuza aktarıyoruz.
Eğer kullanıcı elle yada aç diyalog penceresi ile Text kutusuna bi yol girdiğinde ?İleri? butonumuz aktif hale geliyor. Kullanıcı bu butona tıklayınca neler olacak?

3.Aşama : İkinci Taba ilerleyiş.
İleri, Geri ve iptal butonlarının tıklanması ile aşağıdaki yordam tetiklenecek. Buraya sadece 1.taba doğru ilerlendiğinde gerçekleşecek oly kodlarını yazdım. Şimdilik Buton tıklama kodumuz böyle.
Private Sub cmdButon_Click(Index As Integer)
'İleri, Geri ve İptal butonları
1 Select Case Index
2 Case 0 'Geri butonu
?Geri Butonu tıklanınca olacak olaylar
?Bu bölümün kodları 5.Aşama'da yerleştirilecek
3
4 Case 1 'İleri butonu
5 tabNo = tabNo + 1
6 cmdButon(0).Visible = True
7 Select Case tabNo
8 Case 1 'İkinci Tab (Tab1). Excel dosyasından örnek gösterilecek ve sütun-Alan eşleştirmeleri yapılacak
9 DosyaAdi = txtYol.Text
10 If Dir(DosyaAdi) = "" Then
'Dosya yoksa bunu kullanıcıya bildir ve ilerleme
11 MsgBox "Belirttiğiniz dosya bulunamadı. Lütfen dosya yolunu kontrol edin.", vbCritical, "DOSYA BULUNAMADI!"
12 tabNo = tabNo - 1
13 Else
'Dosya varsa işlemleri yap
'Bir excel şablonu yarat
14 Set Ex = CreateObject("Excel.Application")
15 ExVar = True
'Excel dosyasını bu şablonla aç
16 Ex.Workbooks.Open (DosyaAdi)
17 Ex.Visible = False
18 st = 0
19 grdExcel.Row = 0
'Boş bir sütuna rastlayıncaya kadar
'İlk Excel satırını gridin ilk satırına al
20 While Ex.Cells(1, st + 1) <> ""
21 grdExcel.Cols = st + 1 'Exceldeki sütun sayısına göre, griddeki sütunu arttır
22 grdExcel.Col = st
23 grdExcel.Text = Ex.Cells(1, st + 1)
24 st = st + 1
25 Wend
'Sonra excelden 4 satır daha al örnek olsun diye
26 For i = 1 To 4
27 For j = 0 To grdExcel.Cols - 1
28 grdExcel.Row = i
29 grdExcel.Col = j
30 grdExcel.Text = Ex.Cells(i + 1, j + 1)
31 Next
32 Next
'Excel çalışma kitabını kaydetmeden kapat
33 Ex.Workbooks(1).Close (False)
'Şablonu da kapat ve sıfırla
34 Ex.Application.Quit
35 Set Ex = Nothing
'Excelin ilk satırının sütun başı olup olmamasına göre
'İlk satırıyla yada sıralı olarak sütun numaralarıyla
'Combo1 listesini oluştur tabi önce Combo1'i boşalt
37 Combo1.Clear
38 grdExcel.Row = 0
39 For i = 0 To grdExcel.Cols - 1
40 grdExcel.Col = i
41 If chkSütunBaşı.Value = 1 Then
42 Combo1.AddItem grdExcel.Text
43 Else
44 Combo1.AddItem i + 1 & ".Sütun"
45 End If
46 Next
'Combo1'i ilk elemanı görüntülenecek şekilde ayarla
47 Combo1.ListIndex = 0

48 grdEşleme.Col = 0
'Combo1 içerisindeki elemanları sırası ile
'gdrEşlemenin ilk sütununa aktar
49 For i = 0 To Combo1.ListCount - 1
50 grdEşleme.Rows = i + 2
51 grdEşleme.Row = i + 1
52 grdEşleme.Text = Combo1.List(i)
53 grdEşleme.CellAlignment = 0
54 Next
55 End If
56 Case 2 '3.Tab (Tab2). Eşleşmelerin kontrolü istenecek, onay verilirse işlem devam edecek.
?3.Taba doğru ilerlenmişse olacak olaylar
?Bu bölümün kodları 4.Aşama'da yerleştirilecek
57 Case 3 '4.Tab (Tab3). Son tab.
?Son Taba gelinmişse olacak olaylar
?Bu bölümün kodları 6.Aşama'da yerleştirilecek
58 End Select
'Ön hazırlıkları yukarıdaki bölümlerde yaptıktan sonra
'Hazırlığı yapılmış Tab'ı göster
59 SSTab1.Tab = tabNo
60 Case 2 'İptal butonu
?İptal butonuna tıklayınca olacak olaylar
'Bu bölümün kodları 6.Aşama'nın sonuna doğru yerleştirilecek
61 End Select
End Sub

Uygulamamız tıklanan butonu Index değişkeninden öğrenip, Select-End Select bloğu içerisinde değerlendirecek. Eğer ?İleri' butonuna tıklanmışsa uygulama Case 1 olan bölüme gidecek ve öncelikle tabNo değişkenini 1 arttıracak. Bu arada eğer ?Geri' butonu gizli ise onu görünür hale getirecek. Sonra yine Select ? End Select bloğu ile hangi taba doğru ilerlendiğini bulacak. Bunu TabNo değişkeninden öğrenecek ve ona göre ilgili tabın kodlarını çalıştıracak. Biz tab2'ye doğru ilerlediğimizden Tab2'nin TabIndex'i 1 olacağından TabNo değişkeninin değeri de 1 olacaktır. Bir karışıklık olmaması açısından Tab'ları isimleri ile belirtmeyi uygun görüyorum. Gitmek istediğimiz tab ?ALANLAR?. Uygulama bu tabı göstermeden önce ayarlamalarını yapacak. 9.Satırda text kutusundaki değeri DosyaAdi değişkenine aktararak, 10. satırda bir dosya yolu belirtilip belirtilmediğini kontrol ediyoruz. Eğer bir dosya belirtilmemiş yada belirtilen dosya bulunamamışsa 11. satırla kullanıcıyı uyarıyoruz, 12. satırla da değerini arttırdığımız TabNo değişkenini tekrar 1 azaltıyoruz ki uyarı işlemleri sonrası ekran dosya seçim penceresinde kalsın.
Eğer bir dosya belirtilmiş ve belirtilen dosya bulunmuşsa, yeni bir Excel applicationu yaratıyoruz, applicationun yaratıldığını uygulamaya bildiriyoruz ( ExVar=True) ve bu application ile belirtilen dosyayı açıyoruz (Satır 14-17).
Şimdi sıra geldi, kullanıcıya örnek bir seçim alanı göstermek. Amacımız uygulama penceremizde kullanıcının Excel listesinin bir örneğini göstererek, çalışmaları kolaylaştırmak. Bunun için Excelin ilk satırını, boş bir sütuna rastlayıncaya kadar hücre hücre grdExcel'in ilk satırına yazdırıyoruz (Satır 20-25). While Ex.Cells(1, st + 1) <> "" kodu seçilen Excel hücresi boş olduğunda döngüye girilmemesini sağlar. Biz grid için 3 sütun tanımlamıştık. Bu yüzden eğer Exceldeki sütun sayısı bundan fazla ise, grideki sütunları da buna göre arttırıyoruz. Buna dikkat etmek gerekir. İlk satırı aktardıktan sonra, sütun sayısını bilmenin verdiği rahatlıkla kolay bir şekilde 4 satır daha aktarıyoruz ki 5 satırlık bir örneğimiz olsun, göz doldursun. (Satır 26-32). Bu işlem sırasında iç içe 2 For-Next döngüsü kullandık. Dıştaki döngü satırlar arasında ilerlemeyi gerçekleştirirken, içteki döngü ile hali hazırdaki satırın sütunlarında ilerlememizi sağlıyoruz. grdExcel ile kullanıcıya Excel dosyasının basit bir örneğini göstermiş oluyoruz.

Not: Bir gridde bir hücrenin özelliklerine ulaşmak için önce satır ve sütun numaraları belirtilir, sonra örneğin içindeki yazı öğrenilir, değiştirilir, hücre biçimlendirilir vs. 3.Satır, 5.Sütunda yer alan hücre içerisine, bu hücrenin sütun ve satır numaralarını şöyle yazdırabiliriz
Grid.Row = 2
Grid.Col = 4
Grid.Text = Grid.Row + 1 & ?.Satır ? & Grid.Col + 1 & ?.Sütun? (Yada direkt 3.Satır 5.Sütun)

Satır 33-35 arası Excel sayfasının kapatılması ve yarattığımız şablonların bellekten atılması için.
37. ve 46. satırlar arasında Excel sayfasının (yada grdExcel gridinin) ilk satırını hücre hücre Combo2'ye kontrol ederek yüklüyoruz. Şöyle ki, eğer chkSütunBaşı onay kutusu işaretlenmişse, yani ilk satır excelde sütun başlıklarını anlatıyorsa hücredeki değeri, değilse sırasıyla 1.Sütun, 2.Sütun gibi değerleri yazdırıyoruz. Ardından da ilk elemanı seçili hale getiriyoruz.
Eşleşmeleri yazdırıp görüntüleyeceğimiz yer ise grdEşleme. Bu yüzden Combo1'e eklediğimiz elemanları, grdEşleme'nin ilk sütununa, her biri bir satıra gelecek şekilde yazdırıyoruz. Tabi burada da satır sayısını arttırmayı unutmuyoruz. Küçük bir biçimleme için de hücre hizalamasını sağa yanaşık yaptırıyoruz.
Sonra 59 satıra atlayıp TabNo ön hazırlığı yapılmış olan Tabı SSTab1.Tab=TabNo atanması ile görüntülüyoruz.
Artık kullanıcı sütunları alanlarla eşleştirmeye hazır. Ama önce Exceldeki ilk satırın sütun başlarını tuttuğunu belirtebilir. Bunu chkSütunBaşı onay kutusunu işaretleyerek yapacak.

Private Sub chkSütunBaşı_Click()
'Excel sayfasındaki ilk satırın
'Sütun başlıkları olup olmadığına dair onay kutusu
'Onay kutusu işaretli ise, ilk satır başlık satırı demektir
1 If chkSütunBaşı.Value = 1 Then
'İlk satır başlıkları içeriyorsa
'Griddeki (grdExcel) satırı başlık formatına getir
2 grdExcel.FixedRows = 1
3 Else
'İlk satırda da normal kayıt varsa
'Griddeki ilk satırı da normal yap
4 grdExcel.FixedRows = 0
5 End If

6 Combo1.Clear
7 grdExcel.Row = 0
8 grdEşleme.Col = 0
'İlk satırın durumuna göre Combo1 ve grdEşleme dolduruluyor
9 For i = 0 To grdExcel.Cols - 1
10 grdExcel.Col = i
11 If chkSütunBaşı.Value = 1 Then
'İlk satır sütun başlıklarını içeriyorsa
'Combo1'i ve grdEşleme'nin ilk sütununu
'Bu başlıklarla doldur
12 Combo1.AddItem grdExcel.Text
13 grdEşleme.Row = i + 1
14 grdEşleme.Text = grdExcel.Text
15 Else
'Excelde başlık yoksa
'Excel sütunlarını 1.Sütun, 2.Sütun ... n.Sütun diye adlandır
've igili yerleri bunlarla doldur
16 Combo1.AddItem i + 1 & ".Sütun"
17 grdEşleme.Row = i + 1
18 grdEşleme.Text = i + 1 & ".Sütun"
19 End If
20 Next
'Combo1'de ilk sütunun adını görüntüle
21 Combo1.ListIndex = 0
End Sub

Her şey açık. Eğer ilk satırın sütun başı olup olmaması durumu değiştirilmişse (veya ilk defa belirleniyorsa) Combo1 deki ve grdEşleme içerisindeki sütun adları değiştiriliyor. Bir de farklı olarak, eğer ?İlk satır sütun başlıklarını tutar' denmişse, yani chkSütunBaşı value değeri 1 ise, grdExcel deki ilk satır FixedRow yapılıyor. Yani başlık satırı. (Satır 2)
Şimdi kullanıcımız verileri eşleştirebilir. Yani ecxelin hangi sütunundaki bilgiler, tablomuzun hangi alanına kaydedilecek. Bunun için kullanıcı Combo1'den Excel sütununu, Combo2' den de tablo alanını seçecek ve ?Bağla? butonuna tıklayınca seçilen sütun için, seçilen alanın bilgisi, grdEşleme içerisinde belirtilen sütunun karşısındaki hücreye yazdırılacak.

Private Sub cmdBağla_Click()
'Combo1'den seçilen Excel sütunu ile
'Combo2'den seçilen Kayıtseti alanı eşleştiriliyor
'Bu eşleştirme grdEşleştirme içerisinde gösteriliyor
'Ayrıca işlem yapmada kolaylık olması açısından
'Excel sütun numarası ve Field indexi de grdEşleme içerisideki
'gizli sütunlara aktarılıyor. Son aşamada bu gizli olanlar kullanılacak
1 grdEşleme.Col = 1
2 grdEşleme.Row = Combo1.ListIndex + 1
3 grdEşleme.Text = Combo2.Text
4 grdEşleme.Col = 2
5 grdEşleme.Row = Combo1.ListIndex + 1
6 grdEşleme.Text = Combo1.ListIndex + 1
7 grdEşleme.Col = 3
8 grdEşleme.Row = Combo1.ListIndex + 1
9 grdEşleme.Text = Combo2.ListIndex + 1
10 If Combo1.ListIndex < Combo1.ListCount - 1 Then
11 Combo1.ListIndex = Combo1.ListIndex + 1
12 End If
End Sub

Burada vurgulanması gereken iki nokta var. Birincisi kullanıcı alanların bağlanmasını istediğinde Combo1' de seçilen elemanın index numarasının bir fazlasının grdEşlemenin 3. yani ilk gizli sütununa (Satır 4-6), Combo2' de seçilen elemanın index numarasının bir fazlasının da gridin 4. yani 2.gizli sütununa yazdırılıyor olması Satır 7-9). İkincisi de kullanıcıya kolaylık olması açısından, Combo1 deki seçimin bir sonraki elemana geçirilmesidir. Bu işlem de son elemanda olunup olunmadığı kontrol edilerek 10. ve 12. satırlar arasında gerçekleştirilir.
Kullanıcı, Excele, uygulama veritabanına aktarılmayacak fazladan bir sütuna veri girmiş ve bunun bağlanmasını istememişse onunla hiç işlem yapmayabilir yada o sütun Combo1'de görüntülendiğinde Sütun Atla butonunu tıklayabilir.
Private Sub cmdAtla_Click()
If Combo1.ListIndex < Combo1.ListCount - 1 Then
Combo1.ListIndex = Combo1.ListIndex + 1
End If
End Sub

Kullanıcı eşleşmeyi de belirttiğine göre ilerlemesi için bir engel yok gibi.

4.Aşama : 3.Tab ?KONTROL?
İleri butonu tıklandığında yine ?KONTROL? tabına geçilmeden önce hazırlık yapılacak. Nedir bu hazırlık? grdEşlemenin 1. ve 2. sütunlarına yazdırılmış olan sütun ve alan değerlerinin lstEşleme liste kutularına aktarılması.
Üçüncü aşamada ilk ilerleme işlemimizde kodun genelini vermiştim. Şimdi orada varolan boşluklardan birini dolduruyoruz.
54 Next
55 End If
56 Case 2 '3.Tab (Tab2). Eşleşmelerin kontrolü istenecek, onay verilirse işlem devam edecek.
'3.tabdaki (tab2) listeleri sıfırla
1 For i = 0 To 1
2 lstEşleme(i).Clear
3 Next
'grdEşleme içerisine yazdırılmış olan eşleşmeleri bu listelere aktar
4 grdEşleme.Col = 1
5 For i = 0 To Combo1.ListCount - 1
6 lstEşleme(0).AddItem Combo1.List(i)
7 grdEşleme.Row = i + 1
8 lstEşleme(1).AddItem grdEşleme.Text
9 Next
'İlerlemeyi engelle (Şimdilik)
10 cmdButon(1).Enabled = False
'İlerleme ancak eşleşmelerin doğru olduğuna dair olan onay kutusu işaretlenirse mümkün olacak
57 Case 3 '4.Tab (Tab3). Son tab.
?Son Taba gelinmişse olacak olaylar
58 End Select
'Ön hazırlıkları yukarıdaki bölümlerde yaptıktan sonra
'Hazırlığı yapılmış Tab'ı göster
59 SSTab1.Tab = tabNo
60 Case 2 'İptal butonu

Satır 1-3 arası listeler temizleniyor. 5-9 arasında da değerler listelere aktarılıyor. chkOnay kutusu işaretlenene kadar da ilerleme engelleniyor (cmdButon(1).Enabled = False). 59. satırda yine önceden söylendiği gibi Tab gösterime sunuluyor.

Kullanıcı eşleştirmelerin doğru olduğunu belirtmek için chkOnay kutusunu işaretlemeli.

Private Sub chkOnay_Click()
'Sütun-Alan eşleştirmelerinin doğruluğuna dair teyit isteyen onay kutusu
1 Dim mesaj As String
2 Dim cevap
3 var = False
4 If chkOnay.Value = 1 Then
'Eşleştirmeler doğru ise işleme devam et
5 cmdButon(1).Enabled = True
6 Else
'Onay alana kadar ilerleme yasağı getir
7 cmdButon(1).Enabled = False
8 End If
End Sub

Onay kutusunu işaretledikten sonra ileri butonunu tıklayarak işlemi devam ettirebilir. Diyelim ki eşleştirmeleri yanlış ve bunu düzeltmek istedi. O zaman geri butonu ile bir önceki taba dönecek.

5.Aşama : Geri dönüş
Bu aşamada Geri butonu tıklanınca ne yapar ona bakalım.
Private Sub cmdButon_Click(Index As Integer)
'İleri, Geri ve İptal butonları
Select Case Index
Case 0 'Geri butonu
1 tabNo = tabNo - 1
2 cmdButon(1).Enabled = True
3 If tabNo = 0 Then
4 cmdButon(0).Visible = False
5 End If
6 SSTab1.Tab = tabNo
Case 1 'İleri butonu
tabNo = tabNo + 1

Oldukça basit. TabNo bir azaltılıyor, ileri butonu aktifleştiriliyor ve eğer ilk taba geri dönülmüşse, Geri butonu gizleniyor. Sonra da Tab gösteriliyor.

Varsayımımıza göre kullanıcı yanlış eşleştirmeler yapmıştı. Geri döndü ve bunları düzetti İleri butonunu tıkladı KONTROL sayfasına geldi, kontrol etti ve doğru görerek İleri butonunu tekrar tıkladı.
Bu tıklama ile kullanıcı son aşamaya geçiş yapmak üzere. Artık kayıtlar veritabanına aktarılacak.

6.Aşama : Aktarım

57 Case 3 '4.Tab (Tab3). Son tab.
'İleri ve Geri butonlarını kilitle
1 cmdButon(1).Enabled = False
2 cmdButon(0).Enabled = False
3 'Bu tabda yer alan gizli listeleri boşalt
4 lstAlanİndex.Clear
5 lstSütunİndex.Clear
6 'grdEşleme gizli sütunlarındaki sayısal bağları buradaki listelere aktar
7 For i = 1 To grdEşleme.Rows - 1
8 grdEşleme.Row = i
9 grdEşleme.Col = 3
10 If grdEşleme.Text <> "" Then
'Boş olanlar varsa atla
'Boş olan değerler, exceldeki ilgili sütunun aktarıma dahil edilmediği anlamına gelir.
11 lstAlanİndex.AddItem grdEşleme.Text
12 grdEşleme.Col = 2
13 lstSütunİndex.AddItem grdEşleme.Text
14 End If
15 Next
'Tab3'ü görünür hale getir
16 SSTab1.Tab = tabNo
'Ve excel dosyası ile iletişim kurarak aktarıma başla
17 Dim ExSatır As Integer
18 Dim dolu As Boolean
19 Set Ex = CreateObject("Excel.Application")
20 DosyaAdi = txtYol.Text
21 Ex.Workbooks.Open (DosyaAdi)
22 Ex.Visible = False
23 If chkSütunBaşı.Value = 1 Then
24 ExSatır = 2
25 Else
26 ExSatır = 1
27 End If
28 dolu = True
'Tüm sütunları boş bir satıra rastlayıncaya kadar devam et
'Bu satırın geldiği 'dolu' değişkenine "False" değeri atanarak bildirilecek
'İlk satırı sorgusuz al, çünkü 'dolu' değişkeninin değeri "True"
29 While Not dolu = False
'Bu döngü satırlar arasında dolaşmaya yarayacak
'Döngünün her başlaması yeni bir satıra geçildiği anlamına gelir
'Kayıtsetini kayıt eklenecek duruma getir
30 KayıtSetiÖğrenci.AddNew
'Belirtilen sütunları ara ve hücredeki veriyi
'Eşleştirilen Field alanına aktar
'Bu döngüde bir satırın tüm sütunları taranıp, kayıtsetinin ilgili alanına aktarılıyor
31 For i = 0 To lstAlanİndex.ListCount - 1
'Sıradaki satırın ilk sütunundan başla
32 Ex.Cells(ExSatır, Val(lstSütunİndex.List(i))).Activate
33 KayıtSetiÖğrenci.Fields(Val(lstAlanİndex.List(i))) = Ex.Cells(ExSatır, Val(lstSütunİndex.List(i)))
'Aynı satırın diğer sütununa geç
34 Next
'Bir satırın tüm sütunları taranmışsa kayıtsetini kaydet
35 KayıtSetiÖğrenci.Update
'Diğer satıra geçmek için satır numrasını arttır
36 ExSatır = ExSatır + 1
''dolu' değişkenini "False"ye ayarla, başlangıç için
37 dolu = False
38 For i = 1 To Combo1.ListCount
'Bu döngü sıradaki satırde en az bir dolu hücre olup olmadığına bakacak
'Tek bir tane de olsa bu bir kayıt anlamına geleceğinden
'Uygulama bu satırı da veritabanına aktaracak
'Yeni satırın, tüm sütunlarını tara, dolu hücre var mı bak
39 If Ex.Cells(ExSatır, i) <> "" Then
'Bu satırın herhangi bir yerinde bir dolu hücreye rastlarsan
40 dolu = True ''dolu' değişkenini "True" yap
'Diğer sütunlara bakmana gerek yok, bu döngüden çık
41 Exit For
42 End If
43 Next
44 'Döngü şartına bak ve uygunsa sıradaki satırı aktarmaya başla
45 Wend
'İşlem bitti, Excel dosyasını ve şablonunu kapat, sıfırla
46 Ex.Workbooks(1).Close (False)
47 Ex.Application.Quit
48 Set Ex = Nothing

49 Label7.Caption = "Aktarım tamamlandı."
50 Label6.Caption = "Eşleştirmeleriniz doğrultusunda Excel listesi uygulama veritabanına aktarıldı. " & Chr(34) & "Son" & Chr(34) & " düğmesine tıklayarak " & Chr(34) & "Öğrenci Bilgileri" & Chr(34) & " ekranına dönüp, aktarımın sonuçlarını kontrol edebilirsiniz."
51 cmdButon(2).Caption = "Son" 'İptal butonunu "Son" butonu yap
52 cmdButon(1).Visible = False 'İleri butonunu gizle
53 cmdButon(0).Visible = False 'İleri butonunu gizle
End Select
'Ön hazırlıkları yukarıdaki bölümlerde yaptıktan sonra
'Hazırlığı yapılmış Tab'ı göster
59 SSTab1.Tab = tabNo
60 Case 2 'İptal butonu
?İptal butonuna tıklayınca olacak olaylar
61 End Select
End Sub

?AKTARMA? tabına geçerken İleri ve Geri butonları pasifleştiriliyor ve bu tabdakki listeler boşaltılıyor. Ardından grdEşlemenin gizlediğimiz sütunlarına yazdırdığımız veriler listelere yükleniyor (Satır 1-15). 16.Satır ile diğerlerinden farklı olarak, Tab işlemler bitmeden gösterime sunuluyor ki, buradaki Label'larda yazanların bir anlamı olsun.
Sonrasında yapacağımız işlem 2. Tab ?ALANLAR? da yaptığımızdan farklı değil while-wend döngüsü ile satırlarda ilerlemeye başlıyoruz ve tüm sütunları boş bir satıra rastlayıncaya kadar, her satırın Combo1 deki sütun sayısı kadar sütununa göz atıp buradaki değeri ilgili kayıtseti alanına aktarıyoruz. Sütunlarda ilerlemeyi For-Next döngüsü ile yapıyoruz ve her sütun için alan ayarlamasını son tabdaki gizli listelerdeki verilere göre yapıyoruz. Örneğin bu listelerden lstSütunİndex'in ilk elemanı 2, lstAlanİndex'in ilk elemanı 4 olsun. Uygulama bu veriyi
Kayıtseti.Fields(4) = Ex.Cells(ExSatır, 2)
Şeklindeki bir ifade ile kaydedecektir. İşte yukarıdaki kodların 33. satırında yapılan budur. Listelerin aynı sıradaki her elemanını bu kodda bir araya getirir.
For i = 0 to lstAlanİndex.ListCount
Kayıtseti.Fields(lstAlanİndex'teki i. eleman) = Ex.Cells(ExSatır, lstSütunİndex'teki i.eleman)
Next

Aktarma işlemi tamamlandıktan sonra Label ?ları aktarmanın bittiğini belirten bir şekilde değiştiriyoruz ve İleri, Geri butonlarına ihtiyacımız kalmadığı için onları gizliyoruz. İptal butonuna ise ?Son' yazısı yazdırıyoruz ki, kullanıcı bunu tıklayıp formu kapatabilsin.

İptal butonu, üzerinde yazan yazı ne olursa olsun aynı işlevi görüyor: Formu kapatmak!

'Ön hazırlıkları yukarıdaki bölümlerde yaptıktan sonra
'Hazırlığı yapılmış Tab'ı göster
59 SSTab1.Tab = tabNo
60 Case 2 'İptal butonu
1 Unload me
61 End Select
End Sub


Son aşama : Uygulamanın tüm kodları bir arada

Option Explicit
'Tüm form içerisinde farklı yordamlarda aynı şekilde kullanılacak değişkenler tanımlanıyor.
Dim Ex As Excel.Application ?Excel dosyamızı açmamızı sağlayacak tanımlama
DosyaAdi As String ?Excel Dosyamızın tam yolunu bu değişkene atayacağız.
Dim alan(10) As Integer, sr As Long, ilkhücre As String, başvuru As Integer, st As Long
Dim tabNo As Integer
Dim Bağlantı As Connection ?Veritabanı ile bağlantı için
Dim KayıtSetiÖğrenci As Recordset ?Veritabanındaki bir tabloya bağlantı için
Dim sqlMetni As String ?Tabloyla bağlantı kurarken oluşturacağımız sorgu metni için
Dim ExVar As Boolean ?Sistemimizin bir Exel Aplication ataması durumunda True değerini alacak.

Private Sub chkOnay_Click()
'Sütun-Alan eşleştirmelerinin doğruluğuna dair teyid isteyen onay kutusu
Dim mesaj As String
Dim cevap
var = False
If chkOnay.Value = 1 Then
'Eşleştirmeler doğru ise işleme devam et
cmdButon(1).Enabled = True
Else
?Değilse
'Onay alana kadar ilerleme yasağı getir
cmdButon(1).Enabled = False
End If
End Sub

Private Sub chkSütunBaşı_Click()
'Excel sayfasındaki ilk satırın
'Sütun başlıkları olup olmadığına dair onay kutusu
'Onay kutusu işaretli ise, ilk satır başlık satırı demektir
If chkSütunBaşı.Value = 1 Then
'İlk satır başlıkları içeriyorsa
'Griddeki (grdExcel) satırı başlık formatına getir
grdExcel.FixedRows = 1
Else
'İlk satırda da normal kayıt varsa
'Griddeki ilk satırı da normal yap
grdExcel.FixedRows = 0
End If

Combo1.Clear
grdExcel.Row = 0
grdEşleme.Col = 0
'İlk satırın durumuna göre Combo1 ve grdEşleme dolduruluyor
For i = 0 To grdExcel.Cols - 1
grdExcel.Col = i
If chkSütunBaşı.Value = 1 Then
'İlk satır sütun başlıklarını içeriyorsa
'Combo1'i ve grdEşleme'nin ilk sütununu
'Bu başlıklarla doldur
Combo1.AddItem grdExcel.Text
grdEşleme.Row = i + 1
grdEşleme.Text = grdExcel.Text
Else
'Excelde başlık yoksa
'Excel sütunlarını 1.Sütun, 2.Sütun ... n.Sütun diye adlandır
've igili yerleri bunlarla doldur
Combo1.AddItem i + 1 & ".Sütun"
grdEşleme.Row = i + 1
grdEşleme.Text = i + 1 & ".Sütun"
End If
Next
'Combo1'de ilk sütunun adını görüntüle
Combo1.ListIndex = 0
End Sub

Private Sub cmdAtla_Click()
If Combo1.ListIndex < Combo1.ListCount - 1 Then
Combo1.ListIndex = Combo1.ListIndex + 1
End If
End Sub

Private Sub cmdBağla_Click()
'Combo1'den seçilen Excel sütunu ile
'Combo2'den seçilen Kayıtseti alanı eşleştiriliyor
'Bu eşleştirme grdEşleştirme içerisinde gösteriliyor
'Ayrıca işlem yapmada kolaylık olması açısından
'Excel sütun numarası ve Field indexi de grdEşleme içerisideki
'gizli sütunlara aktarılıyor. Son aşamada bu gizli olanlar kullanılacak
grdEşleme.Col = 1
grdEşleme.Row = Combo1.ListIndex + 1
grdEşleme.Text = Combo2.Text
grdEşleme.Col = 2
grdEşleme.Row = Combo1.ListIndex + 1
grdEşleme.Text = Combo1.ListIndex + 1
grdEşleme.Col = 3
grdEşleme.Row = Combo1.ListIndex + 1
grdEşleme.Text = Combo2.ListIndex + 1
If Combo1.ListIndex < Combo1.ListCount - 1 Then
Combo1.ListIndex = Combo1.ListIndex + 1
End If
End Sub

Private Sub cmdButon_Click(Index As Integer)
'İleri, Geri ve İptal butonları
Select Case Index
Case 0 'Geri butonu
tabNo = tabNo - 1
cmdButon(1).Enabled = True
If tabNo = 0 Then
cmdButon(0).Visible = False
End If
SSTab1.Tab = tabNo
Case 1 'İleri butonu
tabNo = tabNo + 1
cmdButon(0).Visible = True
Select Case tabNo
Case 0 'İlk Tab (Tab0).Giriş tabı. Dosya seçimi yapılıyor.

Case 1 'İkinci Tab (Tab1). Excel dosyasından örnek gösterilecek ve sütun-Alan eşleştirmeleri yapılacak
DosyaAdi = txtYol.Text
If Dir(DosyaAdi) = "" Then
'Dosya yoksa bunu kullanıcıya bildir ve ilerleme
MsgBox "Belirttiğiniz dosya bulunamadı. Lütfen dosya yolunu kontrol edin.", vbCritical, "DOSYA BULUNAMADI!"
tabNo = tabNo - 1
Else
'Dosya varsa işlemleri yap
'Bir excel şablonu yarat
Set Ex = CreateObject("Excel.Application")
ExVar = True
'Excel dosyasını bu şablonla aç
Ex.Workbooks.Open (DosyaAdi)
Ex.Visible = False
st = 0
grdExcel.Row = 0
'Boş bir sütuna rastlayıncaya kadar
'İlk Excel satırını gridin ilk satırına al
While Ex.Cells(1, st + 1) <> ""
'Exceldeki sütun sayısına göre, griddeki sütunu arttır

grdExcel.Cols = st + 1 grdExcel.Col = st
grdExcel.Text = Ex.Cells(1, st + 1)
st = st + 1
Wend
'Sonra excelden 4 satır daha al örnek olsun diye
For i = 1 To 4
For j = 0 To grdExcel.Cols - 1
grdExcel.Row = i
grdExcel.Col = j
grdExcel.Text = Ex.Cells(i + 1, j + 1)
Next
Next
'Excel çalışma kitabını kaydetmeden kapat
Ex.Workbooks(1).Close (False)
'Şablonu da kapat ve sıfırla
Ex.Application.Quit
Set Ex = Nothing
'Excelin ilk satırının sütun başı olup olmamasına göre
'İlk satırıyla yada sıralı olarak sütun numaralarıyla
'Combo1 listesini oluştur tabi önce Combo1'i boşalt
Combo1.Clear
grdExcel.Row = 0
For i = 0 To grdExcel.Cols - 1
grdExcel.Col = i
If chkSütunBaşı.Value = 1 Then
Combo1.AddItem grdExcel.Text
Else
Combo1.AddItem i + 1 & ".Sütun"
End If
Next
'Combo1'i ilk elemanı görüntülenecek şekilde ayarla
Combo1.ListIndex = 0

grdEşleme.Col = 0
'Combo1 içerisindeki elemanları sırası ile
'gdrEşlemenin ilk sütununa aktar
For i = 0 To Combo1.ListCount - 1
grdEşleme.Rows = i + 2
grdEşleme.Row = i + 1
grdEşleme.Text = Combo1.List(i)
grdEşleme.CellAlignment = 0
Next
End If
Case 2 '3.Tab (Tab2). Eşleşmelerin kontrolü istenecek, onay verilirse işlem devam edecek.
'3.tabdaki (tab2) listeleri sıfırla
For i = 0 To 1
lstEşleme(i).Clear
Next
'grdEşleme içerisine yazdırılmış olan eşleşmeleri bu listelere aktar
grdEşleme.Col = 1
For i = 0 To Combo1.ListCount - 1
lstEşleme(0).AddItem Combo1.List(i)
grdEşleme.Row = i + 1
lstEşleme(1).AddItem grdEşleme.Text
Next
'İlerlemeyi engelle (Şimdilik)
cmdButon(1).Enabled = False
'İlerleme ancak eşleşmelerin doğru olduğuna dair olan onay kutusu işaretlenirse mümkün olacak
Case 3 '4.Tab (Tab3). Son tab.
'İleri ve Geri butonlarını kilitle
cmdButon(1).Enabled = False
cmdButon(0).Enabled = False
'Bu tabda yer alan gizli listeleri boşalt
lstAlanİndex.Clear
lstSütunİndex.Clear
'grdEşleme gizli sütunlarındaki sayısal bağları buradaki listelere aktar
For i = 1 To grdEşleme.Rows - 1
grdEşleme.Row = i
grdEşleme.Col = 3
If grdEşleme.Text <> "" Then
'Boş olanlar varsa atla
'Boş olan değerler, exceldeki ilgili sütunun aktarıma dahil edilmediği anlamına gelir.
lstAlanİndex.AddItem grdEşleme.Text
grdEşleme.Col = 2
lstSütunİndex.AddItem grdEşleme.Text
End If
Next
'Tab3'ü görünür hale getir
SSTab1.Tab = tabNo
'Ve excel dosyası ile iletişim kurarak aktarıma başla
Dim ExSatır As Integer
Dim dolu As Boolean
Set Ex = CreateObject("Excel.Application")
DosyaAdi = txtYol.Text
Ex.Workbooks.Open (DosyaAdi)
Ex.Visible = False
If chkSütunBaşı.Value = 1 Then
ExSatır = 2
Else
ExSatır = 1
End If
dolu = True
'Tüm sütunları boş bir satıra rastlayıncaya kadar devam et
'Bu satırın geldiği 'dolu' değişkenine "False" değeri atanarak bildirilecek
'İlk satırı sorgusuz al, çünkü 'dolu' değişkeninin değeri "True"
While Not dolu = False
'Bu döngü satırlar arasında dolaşmaya yarayacak
'Döngünün her başlaması yeni bir satıra geçildiği anlamına gelir
'Kayıtsetini kayıt eklenecek duruma getir
KayıtSetiÖğrenci.AddNew
'Belirtilen sütunları ara ve hücredeki veriyi
'Eşleştirilen Field alanına aktar
'Bu döngüde bir satırın tüm sütunları taranıp, kayıtsetinin ilgili alanına aktarılıyor
For i = 0 To lstAlanİndex.ListCount - 1
'Sıradaki satırın ilk sütunundan başla
Ex.Cells(ExSatır, Val(lstSütunİndex.List(i))).Activate
KayıtSetiÖğrenci.Fields(Val(lstAlanİndex.List(i))) = Ex.Cells(ExSatır, Val(lstSütunİndex.List(i)))

'Aynı satırın diğer sütununa geç
Next
'Bir satırın tüm sütunları taranmışsa kayıtsetini kaydet
KayıtSetiÖğrenci.Update
'Diğer satıra geçmek için satır numrasını arttır
ExSatır = ExSatır + 1
''dolu' değişkenini "False"ye ayarla, başlangıç için
dolu = False
For i = 1 To Combo1.ListCount
'Bu döngü sıradaki satırde en az bir dolu hücre olup olmadığına bakacak
'Tek bir tane de olsa bu bir kayıt anlamına geleceğinden
'Uygulama bu satırı da veritabanına aktaracak
'Yeni satırın, tüm sütunlarını tara, dolu hücre var mı bak
If Ex.Cells(ExSatır, i) <> "" Then
'Bu satırın herhangi bir yerinde bir dolu hücreye rastlarsan
dolu = True ''dolu' değişkenini "True" yap
'Diğer sütunlara bakmana gerek yok, bu döngüden çık
Exit For
End If
Next
'Döngü şartına bak ve uygunsa sıradaki satırı aktarmaya başla
Wend
'İşlem bitti, Excel dosyasını ve şablonunu kapat, sıfırla
Ex.Workbooks(1).Close (False)
Ex.Application.Quit
Set Ex = Nothing

Label7.Caption = "Aktarım tamamlandı."
Label6.Caption = "Eşleştirmeleriniz doğrultusunda Excel listesi uygulama veritabanına aktarıldı. " & Chr(34) & "Son" & Chr(34) & " düğmesine tıklayarak " & Chr(34) & "Öğrenci Bilgileri" & Chr(34) & " ekranına dönüp, aktarımın sonuçlarını kontrol edebilirsiniz."
cmdButon(2).Caption = "Son" 'İptal butonunu "Son" butonu yap
cmdButon(1).Visible = False 'İleri butonunu gizle
cmdButon(0).Visible = False 'İleri butonunu gizle
End Select
'Ön hazırlıkları yukarıdaki bölümlerde yaptıktan sonra
'Hazırlığı yapılmış Tab'ı göster
SSTab1.Tab = tabNo
Case 2 'İptal butonu
Call frmÖgrenci.yenile
Unload Me
End Select
End Sub

Private Sub cmdGözat_Click()
'Tab0 'da dosya seçiminde "Gözat" düğmesi tıklanınca
Common.DialogTitle = "Excel dosyasını seç"
Common.Filter = "Excel dosyaları|*.xls"
Common.InitDir = App.Path
Common.ShowOpen
txtYol.Text = Common.FileName
End Sub

Private Sub Combo1_Click()
'Combo1 de seçilen elemana göre gridde ilgili sütunu seçili yap
grdExcel.Col = Combo1.ListIndex
'Bunun için Sütun belirtilip, bu sütunun ilk satırından başlanarak
grdExcel.Row = 0
'Son satırına kadar tüm satırları seçime dahil ediliyor
grdExcel.RowSel = grdExcel.Rows - 1
End Sub

Private Sub Form_Activate()
MDIForm1.Caption = "ERT-ÖSS ANALİZ [" & Me.Caption & "]"
MDIForm1.Enabled = False
End Sub

Private Sub Form_Load()
'Veritabanı bağlantısını kur
Set Bağlantı = New ADODB.Connection
Bağlantı.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & App.Path & "\Veri\vtÖSS.mdb"
'Kayıtseti oluştur
sqlMetni = "SELECT * FROM tblÖgrenciBilgileri WHERE (((tblÖgrenciBilgileri.Okul)='" & Trim(mdlAyar.kurum) & "') AND ((tblÖgrenciBilgileri.ArşivYılı)=" & Trim(mdlAyar.MezuniyetYılı) & ")) ORDER BY Adı;"
Set KayıtSetiÖğrenci = New ADODB.Recordset
KayıtSetiÖğrenci.Open sqlMetni, Bağlantı, adOpenKeyset, adLockOptimistic
'Tabno değişkenini sıfıra ayarla
tabNo = 0
'grdEşleme için biçim ayarları yap
grdEşleme.ColWidth(0) = 1450
grdEşleme.ColWidth(1) = 1450
grdEşleme.ColWidth(2) = 0
grdEşleme.ColWidth(3) = 0
grdEşleme.CellAlignment = 0
'grdEşleme gridinin başlıklarını ayarla
grdEşleme.Row = 0
grdEşleme.Col = 0
grdEşleme.Text = "Sütun" '1.Sütunun başlığı
grdEşleme.Col = 1
grdEşleme.Text = "Alan" '2.Sütunun başlığı
'Kayıtsetindeki alanların isimleri eşleşme için Combo2 listesine yazdır
Combo2.Clear
For i = 1 To KayıtSetiÖğrenci.Fields.Count - 1
Combo2.AddItem KayıtSetiÖğrenci.Fields(i).Name
Next
End Sub

Private Sub Form_Unload(Cancel As Integer)
KayıtSetiÖğrenci.Close
Set KayıtSetiÖğrenci = Nothing
Bağlantı.Close
Set Bağlantı = Nothing
If ExVar = True Then
Ex.Workbooks(1).Close (False)
Ex.Application.Quit
End If
Set Ex = Nothing
End Sub

Private Sub lstEşleme_Click(Index As Integer)
Dim diğeri
If Index = 0 Then
diğeri = 1
Else
diğeri = 0
End If
lstEşleme(diğeri).ListIndex = lstEşleme(Index).ListIndex
lstEşleme(diğeri).TopIndex = lstEşleme(Index).TopIndex
End Sub

Private Sub txtYol_Change()
cmdButon(1).Enabled = True 'İleri butonu
cmdGözat.Default = False
cmdButon(1).Default = True 'İleri butonu
End Sub


Sonsöz:
Yukarıda açıklamasını yapmadığım iki yordam var. Bunlardan ilki (Form_Unload) form kapanırken Kayıtseti, Veritabanı bağlantısı ve Exel Aplication'u kontrol ediyor açıksa kapatıyor ve değerleri sıfırlayarak belleği boşaltıyor. Diğeri ise KONTROL tabındaki listelerimizin tıklanması durumunda ne olacağını gösteriyor. Listeler uzun olduğunda ListBox içerisine tüm elemanlar sığmayacağından bir kaydırma çubuğu eklenecektir. Kullanıcı listenin altında bulunan bir eşleşmeyi görmek için listelerden birinin kaydırma çubuğunu kullanacak, orada eşleşmesini merak ettiği bir elemanı tıklayacak. Eğer sadece diğer listenin ListIndex özelliğini tıklanan listenin ListIndex özelliğine eşitlemiş olsaydık, diğer listeden aynı sıradaki eleman seçilmiş olacak, ama altlarda kaldığı için göremeyecektik. İşte bu durumda biz hemen bu listenin en üst elemanının indexini liste kutusunun topIndex özelliği ile öğreniyoruz ve diğer listenin TopIndexine de bu değeri atıyoruz. Böylelikle listelerin seçilmiş elemanları aynı hizada oluyor, karşılaştırması kolaylaşıyor. Görsel olarak da rahatsız etmiyor.
Normalde uygulama çok basit kaçtı, dediğim gibi geliştirmeye açık. Ama bu kadar basit şeyi çok uzatıp çok da karışık anlatmış olabilirim. Şimdiden özür diliyorum. Umarım bu karışıklığın içinden çıkıp işinize yarayacak bir-iki şey bulursunuz. Hepinize güzel günler.
epikuros (epikurosster@gmail.com)




Yorumlar, eklemeler ve düşünceler
        Arkada?lar kusurumu ba???lay?n ama ?ekil +'ü göstertmeyi ba?aramad?m. Hatay? da bulamad?m. Görmek isterseniz http://www.imagehack.eu/tr/uploads/c8ec9cf696.jpg adresine gözatabilirsiniz.

   epikuros, 25.08.2007 23:44
   Hata üstüne hata! ?ekil 4 Demek istedim. ?ekil + yok makalede :))

   epikuros, 25.08.2007 23:47
   ?ekil 4 ?imdi gözüküyor. Galiba yöneticiler ilgilendi. E?er öyleyse te?ekkürler.

   epikuros, 26.08.2007 21:02
   Çal??ma güzel fakat a?ureye döndermi?sin. Denemek istedim fakat hata üstüne hata veriyor.

   Uni_Genc, 04.09.2007 22:46
   Nas?l hatalar acaba? ben bir kaç yerde denedim, üstelik uygulamalar?ma koydum, onlar? kullananlar da sorun ya?amad? ama, atlad???m noktalar olabilir. Sorun olmazsa bana hatalar? bildirebilir misiniz?

   epikuros, 06.09.2007 01:31
   arkada?lar ben vbden excel sutunlar?na yan yana veri aktarmak istiyorum

Print #1, Form2.kod, Form2.ebat, Form2.netagirlik, Form2.disderinligi, Form2.tarih, Form2.stokkodu

bole yapt???mda tek sutunun içine yaz?yo lütfen yard?m edinn ne yapabilirim

   requestm, 09.10.2007 10:29
   te?ekür ederim karde? me?ine sa?l?k..

   ehanay, 24.10.2007 18:27
   Say?n epikuros merhaba,

Banada tam olarak bu laz?md? fakat, her?eyi harfiyen yapmama ra?men birkaç yerde hata veriyor çözemedim. Bu konuya ait proje hali varsa link verirsen sevinirim. Yada çözüm konusunda bana nas?l yard?mc? olabilirsin. ?imdiden te?ekkürler

   MetinS, 25.07.2010 21:01
© Hakan Ersöz 2000-2013| Üyelik Sözleşmesi | | Ödeme Bildirimi
Sitemizden yenilikleri hemen öğrenin, pop upları engelleyin, chat yapın... ToolBarımızı indirin:
Vasicmaster Toolbar'ı indirin