8 Şubat 2014 Cumartesi

VB ile DLL Oluşturma ve Kullanma: Excel Dosyası ile İletişim

Exceldeki işlemlerden, Excel dosyasının VBA Kod sayfasında yapacağımız düzenlemelerle haberdar olabiliriz. Bunun için kendi hazırlayacağımız bir DLL’den yararlanmak mümkün. Örnek olarak vereceğim DLL belirttiğimiz sabit bir yolda bulunan veritabanımıza, Excel dosyamız her kaydedildiğinde Kayıt Tarihi ve saatini ekleyecek.
            Öncelikle bir Veritabanımızın olması şart. Veritabanımızın ismi vtExcel. İçerisinde tek tablo var. Alanları KayıtNo(OtomatikSayı), KayıtTarihi(Metin), KayıtSaati(Metin) olan tablomuzun ismi tblKayıt. Veritabanımız “C:\” dizininde.
Yeni bir Proje Başlatıyoruz. Proje türü olarak ActiveX DLL ‘yi seçiyoruz. Projemize bir Class1.cls modülü eklenmiş durumda. Şimdi projemizin adını “ExcelKaydet”, Modülümüzün adını da “Kayıt” olarak değiştiriyoruz.

Modulümüzün içerisine istediğimiz kayıt işlemini gerçekleştirecek aşağıdaki fonksiyonu yazacağız:

Function Kaydet()
‘Değişkenlerimizi tanımlıyoruz
        Dim Bağlantı As Connection
        Dim KayıtSeti As Recordset
        Dim sqlMetni As String
‘Öncelikle veritabanımız ile bağlantılarımızı kuruyoruz
        Set Bağlantı = New ADODB.Connection
        Bağlantı.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & "C:\vtExcel.mdb"
        sqlMetni = "SELECT * From tblKayıt"
‘KayıtSetimizi oluşturup açıyoruz
        Set KayıtSeti = New ADODB.Recordset
        KayıtSeti.Open sqlMetni, Bağlantı, adOpenKeyset, adLockOptimistic
‘Excelde ‘Kaydet’ komutu verildiği andaki Tarih ve Saati veritabanımıza ekliyoruz
        KayıtSeti.AddNew
        KayıtSeti.Fields(1) = Date
        KayıtSeti.Fields(2) = Time
        KayıtSeti.Update
‘KayıtSetimizi, Veritabanımızı kapatıp, değişkenleri serbest bırakıyoruz
        KayıtSeti.Close
        Set KayıtSeti = Nothing
        Bağlantı.Close
        Set Bağlantı = Nothing
        sqlMetni = ""
End Function

İşimizi görecek dll fonksiyonumuz hazır. Şimdi Dll oluşturuyoruz. Bu işlem de son derece basit. Tıpkı exe derler gibi Make ExcelKayıt.dll komutunu veriyoruz ve dll dosyamızı “C:\” altına ExcelKayıt.Dll” olarak derliyoruz.
Bu aşamadan sonrası da Excel’de yapacağımız kodlamalara kalıyor. Takibini yapacağımız Excel dosyasını açtıktan sonra
Araçlar > Makro > Visual Basic düzenleyicisi komutları ile VBE penceresine geçiyoruz. Burada ilk yapacağımız işlem Excel Referanslarına bizim projeyi de eklemek. Bu işlemi tıpkı VisualBasic’deki Referans ekleme işlemi gibi yapıyoruz.
Tools menüsünden References seçeneği ile açılan pencere tanıdık gelecektir. Buradan Browse butonu ile “C:\” altına kaydettiğimiz “ExcelKayıt.dll” dosyasını seçip onaylıyoruz. DLL dosyamız Excele tanıtılmış oldu.
Bu işlemden sonra Exceli bize ihbar edecek olan Sub’umuzu yazabiliriz.
Sub Bildir()
    Dim sınıf As Object
    Set sınıf = CreateObject("ExcelKayıt.Kayıt")
    sınıf.Kaydet
End Sub
Görüldüğü gibi bu Sub DLL içerisine eklediğmiz “Kaydet” fonksiyonunu tetikliyor ve bizim fonksiyonumuz da tetiklendikten sonra üzerine düşeni yapacak.

Peki bu sub ne zaman devreye girecek?
Bizim amacımız, kullanıcı Excel dosyasını kaydettiği her an, bu kayıt işleminin tarihini ve saatini veritabanımıza eklemek. Dolayısı ile WorkBook’un save olaylarından biri gerçekleştiğinde olmalı bu iş. WorkBook’un BeforeSave olayı bu işimizi görür, bu olaya yazabiliriz Sub’umuzu çalıştıracak kodu. Sol üstteki açılan kutudan WorkBook’u, Sağ üstteki açılan kutudan da BeforerSave’i seçiyoruz. Bu olaya yazacağımız kod tek kelime: Subumuzun adı “Bildir.”

Excel VBE kodlarımız şöyle olmalı:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Bildir
End Sub

Sub Bildir()
    Dim sınıf As Object
    Set sınıf = CreateObject("ExcelKayıt.Kayıt")
    sınıf.Kaydet
End Sub

            Kaydedip, Excel kitabımıza geçelim. (Bu  kayıt bile veritabanımıza işlenmiş olmalı). Excel kitabını kaydetmeyi deneyin. Herhangi bir bildirim olmadan o anın tarihi ve saati veritabanına kaydedildi bile. Kontrol edebilirsiniz.


Hiç yorum yok:

Yorum Gönder