29 Ekim 2023 Pazar

VBA'da Erken Bağlama ve Geç Bağlama

VBA (Visual Basic for Applications) Microsoft Office uygulamalarını özelleştirme ve otomasyon için yaygın bir şekilde kullanılan bir araçtır. Ayrıca AutoCAD, SolidWorks gibi programlarda eklenti olarak kullanılmaktadır.

VBA'da nesnelerle etkileşim kurarken iki farklı bağlama türü kullanılır.

  1. Erken bağlama (Early binding)
  2. Geç bağlama (Late binding).

Bu yazıda, her iki bağlama türünü açıklayacak ve hangi durumda hangi türün kullanılması gerektiğini inceleyeceğiz.

1) Erken Bağlama

Erken bağlama nedir?

Erken bağlama(early binding), VBA kodunun nesnelerin ve metodların türünü ve özelliklerini tasarım zamanında tanımladığı bir bağlama türüdür. Erken bağlama, VBA kodunun daha hızlı çalışmasını sağlar ve daha fazla tür güvenliği sunar. Ayrıca, IntelliSense gibi kod geliştirme araçlarına daha fazla destek sağlar.

Erken bağlamanın avantajları

Performans: Erken bağlama, VBA kodunun daha hızlı çalışmasını sağlar. Çünkü nesnelerin ve yöntemlerin türleri tasarım zamanında bilindiği için, derleyici daha iyi optimize edebilir.

Tür Güvenliği: Erken bağlama, kodunuzun daha güvenli hale gelmesini sağlar. Çünkü türler ve yöntemler tasarım zamanında belirlendiği için, hatalı türlerle veya eksik yöntemlerle çalışma riski daha düşüktür.

Kod Hata Ayıklama: Erken bağlama ile kod hata ayıklamak daha kolaydır. Çünkü nesnelerin ve yöntemlerin türleri belirli olduğu için, hata ayıklayıcı daha fazla yardımcı olabilir.

IntelliSense Desteği: Erken bağlama, kod yazarken IntelliSense(akıllı kod tamamlama) gibi kod geliştirme araçlarının kullanımını destekler. Bu, kodunuzu daha hızlı ve hatasız bir şekilde yazmanıza yardımcı olur.

Kodun Okunabilirliği: Erken bağlama ile çalışırken, kodunuz daha okunabilir hale gelir. Çünkü nesnelerin ve yöntemlerin türleri ve özellikleri açıkça belirtilir.

Referans Yönetimi: Erken bağlama, projenizin referanslarını daha iyi yönetmenizi sağlar. Referansları eklemek ve kaldırmak daha kolaydır.

Dokümantasyon Desteği: Erken bağlama, nesnelerin ve yöntemlerin tasarım zamanında belirlendiği için, daha iyi dokümantasyon sağlar. Bu, başkalarının kodunuzu daha iyi anlamasına yardımcı olur.

Kodun Daha İyi Anlaşılması: Erken bağlama ile çalışırken, kodun ne yaptığı daha açık bir şekilde anlaşılır. Çünkü türler ve yöntemler adından ve belirli olduklarından, kodun amacı daha belirgin hale gelir.

Erken bağlama, özellikle büyük ve karmaşık projelerde, performans ve güvenlik açısından büyük avantajlar sunar. Ancak, belirli durumların gerektirdiği esneklik ve uyumluluk ihtiyaçlarına göre geç bağlama (late binding) veya karışık bir yaklaşım kullanmak da gerekebilir. Projenizin ihtiyaçlarına ve hedeflerine bağlı olarak doğru bağlama türünü seçmek önemlidir.

Erken bağlamanın dezavantajları

Versiyon Uyumsuzluğu: Erken bağlama, belirli bir sürümün nesnelerini ve özelliklerini kullanmayı gerektirir. Bu, uygulamanın daha yeni veya daha eski sürümleri ile uyumsuzluk sorunlarına yol açabilir. Kodunuzu bir sürümden diğerine taşırken düzenlemeler yapmanız gerekebilir.

Dosya Boyutu: Erken bağlama kullanırken, projenizin dosya boyutu artabilir. Çünkü erken bağlama referanslarını projenize eklediğinizde, bu referanslar projenizin boyutunu artırabilir. Bu, dosyanın taşınabilirliğini ve paylaşılabilirliğini azaltabilir.

Yavaş Geliştirme: Erken bağlama ile çalışırken, IntelliSense gibi kod geliştirme araçları daha iyi çalışsa da, bazı durumlarda daha fazla kod yazma işlemi gerekebilir. Bu, kodunuzu geliştirmenin daha fazla zaman almasına neden olabilir.

Referans Yönetimi: Erken bağlama kullanırken, projenize eklediğiniz referansları yönetmek zor olabilir. Özellikle başka bir bilgisayara taşındığında veya farklı bir VBA ortamında çalıştırıldığında referansların eksik veya hatalı olması sorunlara yol açabilir.

Esneklik Sorunları: Erken bağlama, projenizin esnekliğini azaltabilir. Eğer uygulamanın veya nesne modelinin belirli bir sürümüne bağlı kalırsanız, yeni özelliklere veya sürümlere uyum sağlama konusunda kısıtlamalarla karşılaşabilirsiniz.

Hata Ayıklama: Erken bağlama, hata ayıklamayı bazen zorlaştırabilir. Çünkü nesne türleri ve özellikleri kodun yazıldığı anda belli olur ve çalışma zamanında değiştirilemez. Bu, hataların nedenlerini bulmayı zorlaştırabilir.

Bu dezavantajlar, projenizin gereksinimlerine ve çalışma koşullarına bağlı olarak değişebilir. Erken bağlama ve geç bağlama (late binding) arasında doğru dengeyi bulmak, projenizin ihtiyaçlarına uygun bir şekilde kod yazmanıza yardımcı olabilir.

Erken bağlama kullanımı:

Erken bağlama kullanmak için öncelikle hedef uygulamanın veya nesne modelinin referanslarını eklemeniz gerekir.
VBA'da referans eklemek için menüden Tools / References tıklanır. Açılan penceredeki listeden eklenecek uygulama referansı seçilir.
Örneğin Excel uygulaması için aşağıdaki resimde olduğu gibi listeden Microsoft Excel xx.x Object Library seçin.

Örnek 1:

Excel ile erken bağlama
Bu örnek, Excel uygulamasına erken bağlama kullanarak erişir ve Excel nesneleri ile etkileşime geçer.
Kodları AutoCAD VBA'da veya diğer VBA eklentisi olan programlarda kullanabilirsiniz.
Sub ErkenBaglama_Excel()
	'Tools / References / Microsoft Excel xx.x Object Library ekleyin

	'Nesneleri tanımla
	Dim ExcelUygulama As Excel.Application
	Dim CalismaKitabi As Excel.Workbook
	Dim Sayfa As Excel.Worksheet

	Set ExcelUygulama = New Excel.Application ' Excel uygulamasına erişim

	ExcelUygulama.Visible = True ' Excel uygulamasını görünür yap

	' Yeni bir çalışma kitabı ekle
	Set CalismaKitabi = ExcelUygulama.Workbooks.Add

	' Çalışma kitabının ilk sayfası
	Set Sayfa = CalismaKitabi.Worksheets(1)

	' Hücreye veri yaz
	Sayfa.Cells(1, 1).Value = "Erken Bağlama Örneği"
	Sayfa.Cells(1, 1).Font.color = vbRed 'Yazı rengini kırmızı yap

	'Nesneleri bellekten temizle
	Set ExcelUygulama = Nothing
	Set CalismaKitabi = Nothing
	Set Sayfa = Nothing
End Sub

Örnek 2:

Word ile erken bağlama
Sub ErkenBaglama_Word()
	'Tools / References / Microsoft Word xx.x Object Library ekleyin

	'Nesneleri tanımla
	Dim WordUygulama As Word.Application
	Dim WordDoc As Word.Document
	Dim WordRange As Word.Range

	Set WordUygulama = New Word.Application
	Set WordDoc = WordUygulama.Documents.Add 'Belge ekle
	WordUygulama.Visible = True ' Word uygulamasını görünür yap

	Set WordRange = WordDoc.Content
	With WordRange.Font
		.color = vbRed ' Kırmızı renk
		.Size = 12 ' Yazı boyutunu ayarla
	End With
	WordRange.Text = "Erken Bağlama Örneği"

	'Nesneleri bellekten temizle
	Set WordUygulama = Nothing
	Set WordDoc = Nothing
	Set WordRange = Nothing
End Sub

2) Geç Bağlama

Geç bağlama Nedir?

Geç bağlama(late binding), VBA'da nesnelerin ve metodların çalışma zamanında tanımlandığı bir bağlama türüdür. Bu, nesnelerin türünü kodun yazıldığı anda belirlemek yerine çalışma zamanında belirlemenizi sağlar. Geç bağlama, kodun daha esnek olmasını sağlar, çünkü nesnelerin türleri önceden bilinmeyebilir. Ayrıca, birden fazla uygulama veya nesne modeli ile etkileşim kurmak için kullanışlıdır.

Geç bağlama avantajları

Esneklik: Geç bağlama, nesnelerin ve yöntemlerin türlerini çalışma zamanında tanımladığı için daha esnek bir yaklaşım sunar. Bu, farklı nesne türleri ve uygulama sürümleriyle çalışmak için uygundur.

Uyumluluk: Geç bağlama, projelerin farklı uygulama sürümleri veya platformlar arasında taşınabilirliğini artırabilir. Çünkü türler ve yöntemler çalışma zamanında belirlendiği için, uyumsuzluk sorunları daha az olabilir.

Dinamik İşlem: Geç bağlama, çalışma zamanında nesnelerin türlerini belirlediği için dinamik işlemleri destekler. Özellikle çalışma zamanında nesneleri oluşturmak veya yönlendirmek için kullanışlıdır.

Çoklu Sürümlerle Uyum: Geç bağlama, farklı sürümleri veya uygulama sürümlerini kullanırken daha iyi uyum sağlar. Referansların veya türlerin belirli bir sürümle bağlı olmaması avantaj sağlar.

Daha Az Referans Yönetimi: Geç bağlama kullanırken, projelerinize belirli referansları eklemeniz gerekmez. Bu, referans yönetimini daha basit hale getirebilir.

Daha Az Derleme Zamanı: Geç bağlama kullanırken, kodunuzun derleme zamanı daha hızlı olabilir. Çünkü derleyici belirli türleri ve metodları tasarım zamanında tanımlamak zorunda değildir.

Yedeklilik: Geç bağlama, çalışma zamanında nesnelerin türlerini belirlediği için, projelerinizi daha iyi yedekleyebilirsiniz. Çünkü belirli bir sürüme veya referansa bağlı olmanıza gerek yoktur.

Geç bağlama, özellikle değişkenlik, esneklik ve uyumluluk gerektiren durumlar için ideal bir seçenektir. Özellikle harici uygulamalarla etkileşim kurarken veya birden çok uygulama sürümü ile çalışırken kullanışlıdır. Ancak, performans ve kod geliştirme araçları gibi bazı durumlar için erken bağlama daha iyi bir seçenek olabilir.

Geç bağlama dezavantajları

Performans Sorunları: Geç bağlama, erken bağlama (early binding) ile kıyaslandığında daha yavaş çalışabilir. Çünkü türler ve metodlar çalışma zamanında tanımlandığı için, kodun daha fazla işlem yapması gerekebilir.

Hata Ayıklama Zorlukları: Geç bağlama kullanırken, hata ayıklama zor olabilir. Çünkü türler ve metodlar tasarım zamanında belirli olmadığı için, hatalar çalışma zamanında ortaya çıkabilir ve kodun neden hata verdiğini belirlemek zorlaşabilir.

Tür Güvenliği Eksikliği: Geç bağlama, erken bağlama kadar tür güvenliği sağlamaz. Yanlış türlerle veya eksik metodlarla çalışma riski daha yüksektir.

IntelliSense Desteği Eksikliği: Geç bağlama ile çalışırken, kod geliştirme araçları, özellikle IntelliSense, daha az destek sunar. Bu, kod yazarken daha fazla hata yapma riskini artırabilir.

Dökümantasyon Zorlukları: Geç bağlama ile çalışırken, kodun daha az açık ve anlaşılır olma riski vardır. Çünkü nesnelerin ve metodların türleri ve özellikleri kodun yazıldığı anda belirli değildir.

Kodun Daha Fazla Olması: Geç bağlama kullanırken, kodunuzun daha fazla olması gerekebilir. Çünkü türler ve metodların belirtilmesi, daha fazla kod yazmayı gerektirebilir.

Yedeklilik Zorlukları: Geç bağlama, çalışma zamanında nesnelerin türlerini belirlediği için, projelerinizi yedeklemek daha zor olabilir. Çünkü belirli bir türe veya referansa bağlı olmadığınız için, projeleri taşımak ve yedeklemek daha karmaşık hale gelebilir.

Bu dezavantajlar, projenizin gereksinimlerine ve hedeflerine bağlı olarak değişebilir. Geç bağlama, esneklik ve uyumluluk gerektiren durumlar için ideal bir seçenek olabilir, ancak tür güvenliği ve performans gerektiren projelerde erken bağlama daha iyi bir seçenek olabilir. Projelerinizin ihtiyaçlarına göre doğru bağlama türünü seçmek önemlidir.

Geç bağlama örnekleri

Örnek 1:

Geç Bağlama ile Excel'de bir çalışma kitabı açma ve hücrelere erişim

Sub GecBaglamaExcel()
	Dim ExcelApp As Object 'nesne tanımla

	'Excel nesnesini değişkene aktar
	Set ExcelApp = CreateObject("Excel.Application") 
	ExcelApp.Workbooks.Add ' Yeni bir çalışma kitabı oluştur

	ExcelApp.Visible = True 'Uygulamayı göster

	' İlk hücreye yazı yaz
	ExcelApp.Cells(1, 1).Value = "Geç Bağlama İle Yazı"

	ExcelApp.Quit ' Excel uygulamasını kapat

	Set ExcelApp = Nothing ' Nesneyi temizle
End Sub
Geç bağlamada nesneler ve metodlar çalışma zamanında belirlendiği için daha esnek bir yapı sunar, ancak tür güvenliğini kaybedebilir ve hata ayıklamak daha zor olabilir. Özellikle farklı sürümlerde veya farklı uygulamalarda çalışırken bu tür bir esneklik önemli olabilir.

Örnek 2:

AutoCAD programına geç bağlanıp bir çizgi ve çizgi ucuna daire çizen bir VBA örnek kodu.
Bu örnek, AutoCAD ile etkileşimde bulunmak için AutoCAD ActiveX API'yi kullanır.
Ayrıca, AutoCAD programının bilgisayarınıza yüklü ve çalışır durumda olması gerekir.
Sub GecBaglamaAutoCAD()
	Dim AutoCADApp As Object 'uygulama
	Dim AutoCADDoc As Object 'belge
	Dim CizgiNesnesi As Object 'çizgi
	Dim DaireNesnesi As Object 'daire
	Dim startPoint(2) As Double 'başlangıç noktası
	Dim endPoint(2) As Double 'bitiş noktası
	Dim DaireYariCapi As Double 'yarıçap

	' AutoCAD uygulamasına bağlan
	Set AutoCADApp = CreateObject("AutoCAD.Application")

	' AutoCAD uygulamasını göster
	AutoCADApp.Visible = True

	' Aktif AutoCAD belgesi
	Set AutoCADDoc = AutoCADApp.ActiveDocument

	' Çizgi başlangıç ve bitiş noktalarını tanımla
	startPoint(0) = 5 'Başlangıç noktası X
	startPoint(1) = 5 'Başlangıç noktası Y
	endPoint(0) = 15 'Bitiş noktası X
	endPoint(1) = 15 'Bitiş noktası Y

	DaireYariCapi = 2 ' Dairenin yarıçapı

	' Çizgiyi çiz
	Set CizgiNesnesi = AutoCADDoc.ModelSpace.AddLine(startPoint, endPoint)

	' Daireyi çiz
	Set DaireNesnesi = AutoCADDoc.ModelSpace.AddCircle(endPoint, DaireYariCapi)
	' Çizimi ekrana sığdır
	AutoCADDoc.SendCommand "_ZOOM _E "
End Sub
Bu kod örneği, AutoCAD uygulamasına bağlanır, çizgi ve daire çizer. Çizginin başlangıç ve bitiş noktalarını, dairenin merkezini ve yarıçapını kodlar ile belirleyebilirsiniz.

Hiç yorum yok:

Yorum Gönder