binding etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
binding etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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

14 Ekim 2023 Cumartesi

AutoCAD VBA. Excele veri yaz-3

VBA kodlarıyla ofis programlarına bağlantı kurulabilir ve programla ilgili birçok işlem yaptırılabilir.
AutoCAD VBA'dan Excel'e bağlantı kurulabildiği gibi tersi de mümkündür
Hatta birçok uyumlu Windows programı birbiri ile bağlanıp kodlarla işlemler yapabilir.

Bu videoda AutoCAD VBA ile Excel'e bağlanmayı ve veri aktarmayı göstermeye devam ediyorum.
  • Excele sayfa ekle
  • Excel sayfası silme
  • AutoCAD çizim nesne adlarını Excele yaz
  • AutoCAD çizim alanındaki çizgilerin uzunluklarını ve toplamını Excele yaz
  • Excel dosyasını aç
Videoda kullanılan VBA kodları:
'Mesut Akcan
'https://mesutakcan.blogspot.com
'https://youtube.com/mesutakcan
'makcan@gmail.com

Sub excelDosyaAc2()
	'1. yöntem: Erken bağlanma. Early Binding
	'Tools / References / Microsoft Excel xx.x Object Library ekle

	Dim xla As Excel.Application 'Excel uygulamasını temsil eden nesne
	Dim wb As Excel.Workbook 'Excel çalışma kitabını temsil eden nesne

	Set xla = Excel.Application
	xla.Visible = True  'uygulamayı ekranda göster

	Set wb = xla.Workbooks.Open("c:\test\test2.xlsx") 'dosyayı excel ile aç
End Sub

Sub excelDosyaAc1()
	'1. yöntem: Erken bağlanma. Early Binding
	'Tools / References / Microsoft Excel xx.x Object Library ekle

	Dim xla As Excel.Application 'excel uygulamasını örnek alan nesne oluştur
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar
	xla.Visible = True 'ekranda excel nesnesini göster

	Dim dosya As Excel.Workbook 'excel çalışma kitabı nesnesi
	Set dosya = xla.Workbooks.Open("c:\test\test1.xlsx") 'dosyayı excel ile aç
End Sub

Sub exceleYaz6()
	'1. yöntem: Erken bağlanma. Early Binding
	'Tools / References / Microsoft Excel xx.x Object Library ekle

	Dim xla As Excel.Application 'excel uygulamasını örnek alan nesne oluştur
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar

	xla.Workbooks.Add 'Yeni dosya oluştur.
	xla.Visible = True 'ekranda excel nesnesini göster
   
	Dim sayfa As Excel.Worksheet 'excel sayfası nesnesi
	Set sayfa = xla.ActiveSheet
	sayfa.Name = "Liste"

	Dim ent As AcadEntity 'AutoCad Varlık

	For Each ent In ThisDrawing.ModelSpace 'Çizim alanındaki tüm varlıklar
		If ent.ObjectName = "AcDbLine" Then
			satir = satir + 1
			uz = ent.Length
			sayfa.Cells(satir, 2) = uz
			toplamUzunluk = toplamUzunluk + uz
		End If
	Next

	sayfa.Cells(satir + 1, 1).Value = "TOPLAM:"
	sayfa.Cells(satir + 1, 2).Value = toplamUzunluk
	sayfa.Cells(satir + 1, 2).Font.color = vbRed

	sayfa.SaveAs "c:\TEST\test2.xlsx" 'Dosyaya kaydet
End Sub

Sub exceleYaz5()
	'1. yöntem: Erken bağlanma. Early Binding
	'Tools / References / Microsoft Excel xx.x Object Library ekle

	Dim xla As Excel.Application 'excel uygulamasını örnek alan nesne oluştur
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar

	xla.Workbooks.Add 'Yeni dosya oluştur.
	xla.Visible = True 'ekranda excel nesnesini göster
   
	Dim sayfa As Excel.Worksheet 'excel sayfası nesnesi
	'Son sayfadan sonra ekle
	Set sayfa = xla.Worksheets.Add(After:=xla.Worksheets(xla.Worksheets.Count))
	sayfa.Name = "TEST"

	Dim ent As AcadEntity 'AutoCad Varlık

	For Each ent In ThisDrawing.ModelSpace 'Çizim alanındaki tüm varlıklar
		satir = satir + 1 'satır numarasını 1 arttır
		sayfa.Cells(satir, 1).Value = ent.ObjectName 'hücreye nesne adını yaz
	Next
	sayfa.SaveAs "c:\TEST\test1.xlsx" 'Dosyaya kaydet
End Sub

Sub exceleYaz4()
	'1. yöntem: Erken bağlanma. Early Binding
	'Tools / References / Microsoft Excel xx.x Object Library ekle

	Dim xla As Excel.Application 'excel uygulamasını örnek alan nesne oluştur
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar

	xla.Workbooks.Add 'Yeni dosya oluştur.
	xla.Visible = True 'ekranda excel nesnesini göster
   
	Dim sayfa As Excel.Worksheet 'excel sayfası nesnesi
	'Set sayfa = xla.Worksheets.Add(After:=xla.Worksheets(xla.Worksheets.Count)) 'Son sayfadan sonra yeni sayfa ekle

	'2. sayfadan sonra ekle
	Set sayfa = xla.Worksheets.Add(After:=xla.Worksheets(2))
	sayfa.Name = "TEST"

	'TEST sayfasından sonra ekle
	Set sayfa = xla.Worksheets.Add(After:=xla.Worksheets("TEST"))
	sayfa.Name = "DENEME"

	'TEST sayfasından önce ekle
	Set sayfa = xla.Worksheets.Add(Before:=xla.Worksheets("TEST"))
	sayfa.Name = "HESAP"

	sayfa.Delete

	Set sayfa = xla.Worksheets("TEST")
	sayfa.Delete 'sayfa sil

	xla.Worksheets("DENEME").Delete 'sayfa sil
End Sub

Sub exceleYaz3()
	'2. yöntem: Geç bağlanma. Late Binding

	Dim xla As Object 'nesne için değişken tanımla
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar
	xla.Visible = True 'ekranda excel nesnesini göster

	Dim wb As Object 'nesne için değişken tanımla
	Set wb = xla.Workbooks.Add 'Yeni dosya oluştur.

	Dim sayfa As Object 'nesne için değişken tanımla
	Set sayfa = wb.Worksheets.Add 'yeni dosya oluştur
	sayfa.Name = "TEST" 'sayfa adını değiştir.
	sayfa.Cells(4, 3) = "Merhaba" 'satır 4, sütun 3'e Merhaba yaz
End Sub

Sub exceleYaz2()
	'1. yöntem: Erken bağlanma. Early Binding
	'Tools / References / Microsoft Excel xx.x Object Library ekle

	Dim xla As Excel.Application 'excel uygulamasını örnek alan nesne oluştur
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar
	xla.Workbooks.Add 'Yeni dosya oluştur.
	xla.Visible = True 'ekranda excel nesnesini göster

	'xla.Worksheets.Add 'yeni excel sayfası ekle

	Dim sayfa As Excel.Worksheet 'excel sayfası nesnesi
	Set sayfa = xla.Worksheets.Add 'yeni excel sayfası ekle

	sayfa.Name = "TEST" 'sayfa adını değiştir

	Set sayfa = xla.Worksheets(2) 'excel 2. sayfa
	sayfa.Activate 'sayfayı aktif et

	With sayfa.Range("B3")
		.Value = "Merhaba" 'Satır 3, Sütun 2'ye Merhaba yaz
		.Interior.color = vbRed 'zemin rengi kırmızı
		.Font.color = vbWhite 'yazı rengi beyaz
		.Font.Bold = True 'kalın yazı
		'.Select 'B3 hücresini seç
	End With
End Sub

Sub exceleYaz1()
	'1. yöntem: Erken bağlanma. Early Binding
	'Tools / References / Microsoft Excel xx.x Object Library ekle

	Dim xla As Excel.Application 'excel uygulamasını örnek alan nesne oluştur
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar
	xla.Workbooks.Add 'Yeni dosya oluştur.
	xla.Visible = True 'ekranda excel nesnesini göster

	With xla.Application.Range("B3")
		.Value = "Merhaba" 'Satır 3, Sütun 2'ye Merhaba yaz
		.Interior.color = vbRed 'zemin rengi kırmızı
		.Font.color = vbWhite 'yazı rengi beyaz
		.Font.Bold = True 'kalın yazı
		.Select 'B3 hücresini seç
	End With
	xla.Quit 'Exceli kapat
End Sub

12 Ekim 2023 Perşembe

AutoCAD VBA. Excele veri yaz-2


VBA kodlarıyla Microsoft Office programlarına bağlantı kurulabilir ve programla ilgili birçok işlem yaptırılabilir.

AutoCAD VBA'dan Excel'e bağlantı kurulabildiği gibi tersi de mümkündür
Hatta birçok uyumlu Windows programı birbiri ile bağlanıp kodlarla işlemler yapabilir.

Bu videoda AutoCAD VBA ile Excel'e bağlanmayı ve veri aktarmayı göstermeye devam ediyorum.

Excel ile bağlantı kurmak için 2 yöntem var.
1) Erken bağlama. Early Binding
2) Geç bağlama. Late Binding

Yöntemlerin avantaj ve dezavantajları

Erken bağlama:

Avantajları:
  • Çalışması daha hızlıdır.
  • Intellisense(Akıllı kod tamamlama) bağlanan nesnelerde kullanılabildiği için kod yazımı daha kolaydır.
  • Programın başlangıcında tüm değişkenlere değer atama işlemini yapar. Bu nedenle, programın bellek kullanımı artabilir.
Dezavantajları:
  • Referans eklenmelidir. Ekli değilse çalışmaz.

Geç bağlama:

Avantajları:
  • Referans eklemek gerekli değildir. Kullanıcının bir işlem yapması gerekmez.
  • Bellek kullanımı verimlidir.
Dezavantajları:
  • Nesneye bağlanma çalışma zamanında gerçekleştiği için yavaş çalışır.
  • Intellisense(Akıllı kod tamamlama) bağlanan nesnelerde çalışmaz. Bu yüzden kod yazmak zorlaşır.
Videoda kullanılan VBA kodları:
Sub exceleYaz3()
	'2. yöntem: Geç bağlanma. Late Binding
	Dim xla As Object 'nesne için değişken tanımla
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar
	xla.Visible = True 'ekranda excel nesnesini göster

	Dim wb As Object 'nesne için değişken tanımla
	Set wb = xla.workbooks.Add 'Yeni dosya oluştur.

	Dim sayfa As Object 'nesne için değişken tanımla
	Set sayfa = wb.worksheets.Add 'yeni dosya oluştur
	sayfa.Name = "TEST" 'sayfa adını değiştir.
	sayfa.cells(4, 3) = "Merhaba" 'satır 4, sütun 3'e Merhaba yaz

End Sub

Sub exceleYaz2()
	'1. yöntem: Erken bağlanma. Early Binding
	'Tools / References / Microsoft Excel xx.x Object Library ekle

	Dim xla As Excel.Application 'excel uygulamasını örnek alan nesne oluştur
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar
	xla.workbooks.Add 'Yeni dosya oluştur.
	xla.Visible = True 'ekranda excel nesnesini göster

	'xla.Worksheets.Add 'yeni excel sayfası ekle

	Dim sayfa As Excel.Worksheet 'excel sayfası nesnesi
	Set sayfa = xla.worksheets.Add 'yeni excel sayfası ekle

	sayfa.Name = "TEST" 'sayfa adını değiştir

	Set sayfa = xla.worksheets(2) 'excel 2. sayfa
	sayfa.Activate 'sayfayı aktif et

	With sayfa.Range("B3")
		.Value = "Merhaba" 'Satır 3, Sütun 2'ye Merhaba yaz
		.Interior.color = vbRed 'zemin rengi kırmızı
		.Font.color = vbWhite 'yazı rengi beyaz
		.Font.Bold = True 'kalın yazı
		'.Select 'B3 hücresini seç
	End With

End Sub

Sub exceleYaz1()
	'1. yöntem: Erken bağlanma. Early Binding
	'Tools / References / Microsoft Excel xx.x Object Library ekle

	Dim xla As Excel.Application 'excel uygulamasını örnek alan nesne oluştur
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar
	xla.workbooks.Add 'Yeni dosya oluştur.
	xla.Visible = True 'ekranda excel nesnesini göster

	With xla.Application.Range("B3")
		.Value = "Merhaba" 'Satır 3, Sütun 2'ye Merhaba yaz
		.Interior.color = vbRed 'zemin rengi kırmızı
		.Font.color = vbWhite 'yazı rengi beyaz
		.Font.Bold = True 'kalın yazı
		.Select 'B3 hücresini seç
	End With
	xla.Quit 'Exceli kapat
End Sub

11 Ekim 2023 Çarşamba

AutoCAD VBA. Excele veri yaz-1


VBA kodlarıyla Microsoft Office programlarına bağlantı kurulabilir ve programla ilgili birçok işlem yaptırılabilir.
AutoCAD VBA'dan Excel'e bağlantı kurulabildiği gibi tersi de mümkündür.
Hatta birçok uyumlu Windows programı birbiri ile bağlanıp kodlarla işlemler yapabilir.

Bu videoda AutoCAD VBA ile Excel'e bağlanmayı ve veri aktarmayı gösterdim.

Excel ile bağlantı kurmak için 2 yöntem var.
1. yöntem: Referans kullanmak. Erken bağlanma(Early Binding)
2. yöntem: Referans kullanmadan kod ile bağlanma. Geç bağlanma(Late Binding)
İki yöntemin de avantaj ve dezavantajları var.
Bu videoda 1. yöntem ile Excele nasıl bağlanacağı gösterildi.

Videoda kullanılan VBA kodları:
Sub exceleYaz()
	Dim xla As Excel.Application 'excel uygulamasını örnek alan nesne oluştur
	Set xla = CreateObject("Excel.Application") 'excel nesnesi oluşturup değişkene aktar
	xla.Workbooks.Add 'Yeni dosya oluştur.
	xla.Visible = True 'ekranda göster 'excel nesnesini göster
	'xla.Application.Cells(3, 2).Value = "Merhaba" 'Satır 3, Sütun 2'ye Merhaba yaz
	'xla.Application.Range("B3").Value = "Merhaba" 'Satır 3, Sütun 2'ye Merhaba yaz
	With xla.Application.Range("B3")
		.Value = "Merhaba" 'Satır 3, Sütun 2'ye Merhaba yaz
		.Interior.color = vbRed 'zemin rengi kırmızı
		.Font.color = vbWhite 'yazı rengi beyaz
		.Font.Bold = True 'kalın yazı
		.Select 'B3 hücresini seç
	End With
	xla.Quit 'Exceli kapat
End Sub