Visual Basic'den Excel'e Bağlantı - 1

Siraç

Yönetici
Admin
Editör
#1
Sponsorlu Bağlantılar
Visual Basic'den Excel'e Bağlantı - 1

Bu yazıda Excel ve Visual Basic ile uğraşan kimselerin çokça üzerinde durduğu bir konu olan "Visual Basic'ten Excel'e veri transferi" konusunu ayrıntılı bir şekilde anlatacağım. Öncelikle bunun çok basit bir işlem olduğunu bilmenizi isterim. Visual Basic'te birkaç satır fazladan yazarak aynen VBA 'da olduğu gibi makroları kullanarak Excel'e veri transferi yapacağız.

Önce Visual Basic'i açalım ve Standart Exe Projesini başlatalım. Şimdi Excel ile oynamak için Project Mönüsünden References komutunu çalıştıralım. Karşımıza gelen pencereden "Microsoft Excel 10.0 Object Library" seçeneğini onaylayalım ve OK düğmesine basalım.

Not:
Siz hangi Excel sürümünü kullanıyorsanız onu seçin. Ben 2002 yani 10 versiyonunu kullandığım için bunu işaretledim.

Her şey tamam. Artık Visual Basic içinden Excel ile istediğimiz gibi oynayabiliriz. Önce basitten bir örnek verelim. Formun kod sayfasını açalım ve "Form_Load" bölümüne aşağıdaki kodları yazalım.

-------------------------------------------------------------------------------
Dim kitap As Object
Set kitap = CreateObject("Excel.application")
kitap.Workbooks.Add
kitap.Sheets("Sayfa1").Range("A1").Select
ActiveCell.FormulaR1C1 = "Excel ile Bağlantı Kuruldu"
ActiveWorkbook.SaveAs ("C:\VB-XLS.xls")
Excel.Application.Quit
-------------------------------------------------------------------------------

Şimdi örnekteki kodların ne işe yaradıklarını kısaca açıklayalım.

Dim kitap As Object

Burada kitap adlı bir nesne tanımladık. Bütün işlemleri bu nesne üzerinden yürüteceğiz.

Set kitap = CreateObject("Excel.Application")

Burada kitap olarak tanımladığımız nesnenin Excel uygulamasına ait olduğunu ve yeni bir Excel uygulaması yarattığımızı görüyoruz.

kitap.Workbooks.Add

Uygulamaya yeni bir çalışma kitabı ekliyoruz.

kitap.Sheets("Sayfa1").Range("A1").Select

Çalışma kitabındaki Sayfa1 isimli sayfanın A1 hücresini seçiyoruz.

ActiveCell.FormulaR1C1 = "Excel ile Bağlantı Kuruldu"

Aktif hücreye "Excel ile Bağlantı Kuruldu" yazdırıyoruz.

ActiveWorkbook.SaveAs ("C:\VB-XLS.xls")

Çalışma kitabını C: sürücüsüne "VB-XLS.xls" adıyla farklı kaydediyoruz.

Excel.Application.Quit

Son olarak Excel uygulamasından çıkıyoruz.

Görüldüğü gibi son derece basit bir olay. Kodları daha da kısa açıklarsak Excel uygulamasını başlat, yeni bir kitap aç, Sayfa1' deki A1 hücresine "Excel ile Bağlantı Kuruldu" , farklı kaydet ve Uygulamadan çık.

Kaynak
 

Siraç

Yönetici
Admin
Editör
#2
Excel – Visual Basic ilişkilerine devam ediyoruz ve asıl konumuz olan "Visual Basic 'ten Excel'e kayıt" konusuna başlıyoruz. Öncelikle Excel'i başlatıp yeni bir çalışma kitabı açalım. Bu çalışma kitabının içersine yeni bir çalışma sayfası ekleyelim. Bu sayfanın adı "PersonelBilgi" olsun. Diğer çalışma sayfalarını silelim. Şimdi kayıt alanlarımızı belirleyelim. Alanlarımız aşağıdaki gibi olsun.



Şimdi çalıma kitabını C: sürücüsünde "Personel" adlı klasörün içine "PersonelBilgi.xls" adıyla kaydedelim ve kapatalım. Artık kayıtları tutacağımız veritabanımız hazır hale geldi.

Visual Basic'i açalım ve yeni bir standart Exe projesi oluşturalım. Bu projede kullanacağımız nesneler ve isimleri aşağıdaki gibi olsun.



"Sıra No" olarak kullanacağımız textboxun "Enabled" özelliğini "False" olarak değiştirin. Çünkü burada sadece sıra numarasını görüntüleyeceğiz. Yani bilgi girişi olmayacak. Formun Son görüntüsü aşağıdaki gibi olacaktır. Bu projeyi C: sürücüsündeki "Personel" adlı klasöre kaydedin.



Sıra geldi işin kod yazma kısmına. Tabi önceki bölümde de açıkladığım gibi Visual Basic 'e Excel'i tanıtmamız gerekiyor. "Project" mönüsünden "References" komutunu çalıştırıp "Microsoft Excel 10.0 Object Library" seçeneğini aktif hale getirelim. Herşey tamamlandı. Aşağıdaki kodları formun kod sayfasına yapıştırın.

Not: Bu kodları yapıştırmadan kendiniz yazarsanız bazı şeyleri daha çabuk kavrayabilirsiniz.

Private Sub Command1_Click()
txtSira.Text = WorksheetFunction.Count(Range("A1:A65000")) + 1

Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop

ActiveCell.Value = txtSira.Text
ActiveCell.Offset(0, 1).Value = txtAd.Text
ActiveCell.Offset(0, 2).Value = txtDYeri.Text
ActiveCell.Offset(0, 3).Value = txtMaasi.Text
MsgBox "Verileriniz Kaydedildi"
ActiveWorkbook.Save
txtSira.Text = WorksheetFunction.Count(Range("A1:A65000")) + 1
txtAd.Text = ""
txtDYeri.Text = ""
txtMaasi.Text = ""
txtAd.SetFocus
End Sub

Private Sub Command2_Click()
Application.Quit
Unload Me
End Sub

Private Sub Command3_Click()
If txtAd.Text = "" Then
MsgBox "Lütfen Ad Soyad kutusuna geçerli personel girin."
Exit Sub
End If

Set adsoyad = Range("B2:B100").Find(txtAd.Text, _
SearchDirection:=xlNext, MatchCase:=False)
If adsoyad Is Nothing Then
MsgBox "Aradığınız Ad ve Soyad'da kayıt bulunamadı"
Exit Sub
End If

ilksatir = adsoyad.Row
Set adsoyad = Range("B2:B100").FindPrevious(Range("B100"))
sonsatir = adsoyad.Row
Set adsoyad = Range(Cells(ilksatir, 2), _
Cells(sonsatir, 2)).Find(txtAd.Text, _
SearchDirection:=xlNext, MatchCase:=False)
txtSira.Text = Cells(ilksatir, 1).Value
txtAd.Text = Cells(ilksatir, 2).Value
txtDYeri.Text = Cells(ilksatir, 3).Value
txtMaasi.Text = Cells(ilksatir, 4).Value
End Sub

Private Sub Command4_Click()
txtSira.Text = WorksheetFunction.Count(Range("A1:A65000")) + 1
txtAd.Text = ""
txtDYeri.Text = ""
txtMaasi.Text = ""
txtAd.SetFocus
End Sub

Sub form_load()
KitapYolu = App.Path + "\PersonelBilgi.xls"
Workbooks.Open (KitapYolu)
Sheets("PersonelBilgi").Select
Range("A1").Select
txtSira.Text = WorksheetFunction.Count(Range("A1:A65000")) + 1
End Sub

Private Sub Form_Unload(Cancel As Integer)
Application.Quit
End Sub

Artık programı çalıştırıp kayıt girebilir ve kayıt arayabiliriz. Kodları adım adım açıklayalım.

Formun Load Yordamı :

KitapYolu = App.Path + "\PersonelBilgi.xls"
KitapYolu isimli değişken ile kitabın yeri belirleniyor

Workbooks.Open (KitapYolu)
Çalışma kitabı açılıyor.

Sheets("PersonelBilgi").Select
Range("A1").Select
Çalışma kitabındaki "PersonelBilgi" isimli sayfa seçiliyor ve bu sayfadaki A1 hücresi seçiliyor.

txtSira.Text = WorksheetFunction.Count(Range("A1:A65000")) + 1
txtSira isimli Text kutusuna çalışma sayfası özelliği olan Count (say) kullanılarak bir sıra numarası atanıyor.

Private Sub Form_Unload(Cancel As Integer)
Application.Quit
End Sub
Burası formun kapanış yordamıdır. Form herhangi bir şekilde kapanırken neler yapılacaksa buraya yazılır. Ben burada sadece "Application.Quit" kodlarını kullandım. Bunun anlamı "Uygulamadan Çık" tır. Tabi bu uygulama bizim yaptığımız uygulama değil, Excel uygulamasıdır. Eğer bunu yapmasaydık, Excel arka planda çalışır durumda olacaktı.

Şimdi kaydet düğmesinin kodlarına bakalım.

Do While Not IsEmpty(ActiveCell)
Burada bir döngü kullandık. Bu döngü sıra numarası içindi. A1 hücresi dolu ise ;

ActiveCell.Offset(1, 0).Select
bir alttaki hücreyi seç.

ActiveCell.Value = txtSira.Text
ActiveCell.Offset(0, 1).Value = txtAd.Text
ActiveCell.Offset(0, 2).Value = txtDYeri.Text
ActiveCell.Offset(0, 3).Value = txtMaasi.Text
MsgBox "Verileriniz Kaydedildi"
ActiveWorkbook.Save
Burada bütün textboxlardaki bilgilerimiz kayıt alanlarına yerleştiriliyor, mesaj kutusuyla kaydın tamamlandığı belirtiliyor ve çalışma kitabı kaydediliyor.

Personel Çağır adlı komut düğmesinin kodlarını açıklayalım.

If txtAd.Text = "" Then
MsgBox "Lütfen Ad Soyad kutusuna geçerli personel girin."
Exit Sub
End If
Eğer ismi yazacağımız kutucuk boş ise mesaj kutusu gönder ve yordamdan çık.

Set adsoyad = Range("B2:B100").Find(txtAd.Text, _
SearchDirection:=xlNext, MatchCase:=False)
Burada adsoyad isimli bir kısaltma yaptık. Bu arayacağımız kriter ve bu kriter bulunduğu kayıt alanıdır.

txtSira.Text = Cells(ilksatir, 1).Value
txtAd.Text = Cells(ilksatir, 2).Value
txtDYeri.Text = Cells(ilksatir, 3).Value
txtMaasi.Text = Cells(ilksatir, 4).Value
Son olarak arattığımız ismin diğer bilgilerini kutucuklara yerleştirdik.

İşte bu kadar. Çok zor olmadığını gördünüz. Bu projenin dosyalarının indirmek için tıklayın.

Tabi daha öncede söylediğim gibi kodları kendiniz yazarsanız olayı daha iyi kavramış olursunuz.

Herkese çalışmalarında başarılar dilerim..

Kaynak
 

#4
Selamlar..

paylaşım için tşkler ancak benim bi prob var yardımcı olabilirmisiniz..

Uygulamamda formu 'ekrani kapla' tiklandiginda form üzerinde ki tüm textbox, label,listbox,panel vb.. varsa büyümesini daha dogrusu ekrani kaplayacak sekilde default haliyle hepsinin birbiri ile ölçeklenerek ekrani kaplamasini istiyorum bu nu nasil yapabiliriz,normalde denedigimde maximum size tikladigimda sadece form büyüyor textboxlar vb. ayni boyuta kaliyor ?
Simdiden tesekkürler..