Kullanıcıdan veritabanımıza girip Access Dosya Menüsü> Al
yolu ile Excel dosyasını aktarmasını isteyemeyeceğimize göre Excel'den veri
almamız gerekirse kullanıcıya bunu nasıl yaptıracağız? Yazımda bunu anlatmaya
çalıştım.
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
**************************************
1)
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
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
End If
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
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.
If Combo1.ListIndex < Combo1.ListCount - 1 Then
Combo1.ListIndex = Combo1.ListIndex + 1
End If
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.
Hiç yorum yok:
Yorum Gönder