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

'Bilgisayar Hakkında Genel Bilgiler' forumunda Siraç tarafından 16 Nisan 2009 tarihinde açılan konu

  1. Siraç

    Siraç Site Yetkilisi Admin Editör

    Sponsorlu Bağlantılar
    Visual Basic'den Excel'e Bağlantı - 1 konusu 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
     
  2. Siraç

    Siraç Site Yetkilisi Admin Editör

    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.

    [​IMG]

    Ş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.

    [​IMG]

    "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.

    [​IMG]

    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
     
  3. qazmq

    qazmq Yeni Üye

    microsoft exel liblary de atarmısınız çoğu kişide yokta..
     
  4. selotes

    selotes Yeni Üye

    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..
     
  5. Kafam çok karıştı ya. Ayrıntılarıyla anlatmışsın.
     

Bu Sayfayı Paylaş