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

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

20 Haziran 2023 Salı

QuickBasic - 2: Veri Tipleri

Yayınlama: 2000
Güncelleme: 20 Haziran 2023
QuickBasic'te çeşitli veri tipleri vardır.
Belleğe aktarılacak veriler için bellekte gereken boyutta yer açılır. Değişkenin içeriği ancak bu şekilde bellekte düzenli bir şekilde yerleşir.

Örnek:
A% = 126
A değişkenin yanındaki % işareti değişkenin bir INTEGER veri tipine sahip olduğunu gösterir.
A
değişkeni için bellekte 2 byte'lık yer açılır. Çünkü INTEGER veri tipi 2 byte'dır. 8 bit (binary digit= ikilik sayı) 1 baytı oluşturur.
1 baytın alacağı değer sayısal olarak 0-255, karakter olarak ise 1 karakter(harf, rakam, simge)dir.

Açılan bellek alanının bir kapasitesi olduğu için değişkene kapasitesinden daha büyük veri aktarmak Owerflow (aşırı yükleme, taşma) hatasına neden olacaktır.

Örnek:
A% = 32768 'Owerflow (taşma hatası)
PRINT A%
A% değişkeni 2 baytlık(16 bit) INTEGER değişken olduğu için alabileceği değer aralığı -32768 ile +32767 olduğu için örnekte verilen 32768 değeri sınırı aşmaktadır.
Yani bellekte açılan alana bu sayı aktarılamaz. O yüzden hata verir. Değişken türü ya da değeri değiştirilmelidir.

Normalde 2 bayt(16 bit) 256*256 = 0-65536 (2 üzeri 16 = 65536) arası değer alabilir. Ancak INTEGER değişkende negatif sayıları da kullanabilmek için 16 bitin 1 biti sayının + ya da - işareti için kullanılmaktadır.
Böylece sayı için 15 bit, işaret için 1 bit kullanılır.
15 bit (2 üzeri 15) = 32768

13 Aralık 2022 Salı

Excel satırlarını belli sayıda bölme ve dosya veya sayfalara aktarma

Yayınlama: 20/02/2021
Güncelleme: 13/12/2022
Donanım Haber Forumundaki bir soru üzerine cevap olarak verdiğim Excel VBA kodlamaları buraya aktarıyorum.

Soru 1

Elimde içerisinde 40.000 satır veri bulunan bir Excel dosyası var. Bu 40.000 satırı 100'erli olarak bölmem gerekiyor.

Cevap: Aşağıdaki yazdığım VBA makrosu ile 100'erli satır olarak yeni eklenen sayfalara aktarılmaktadır.
Makroları kullanmak için;
Excel dosyası açıkken;
Excel durum çubuğundaki sayfa adında sağ tıkla / Kod görüntüle
Kod alanına aşağıdaki kodları ekle
Çalıştırmak için F5e bas ya da Excel'e geç / ALT+F8e bas makroyu seç / Çalıştır.

Sub SatirlariSayfalaraAktar_v1()
 'Excel satırlarını 100'erli olarak bölüp yeni sayfalara aktarır
 'makro: Mesut Akcan
 '15 Eylül 2018
 For n = 1 To Cells.SpecialCells(xlLastCell).Row Step 100
     satirlar = Str(n) & ":" & Trim(Str(n + 99))
     Rows(satirlar).EntireRow.Copy
     Sheets.Add After:=ActiveSheet
     ActiveSheet.Paste 
     DoEvents
 Next
 Sheets(1).Activate
 End Sub

Soru 2

Bu 100'lü bölümleri farklı yeni Excel dosyası olarak kaydedebilir miyiz.

15 Şubat 2021 Pazartesi

QuickBasic - 3: Değişkenlere veri aktarma

Yayınlama: 2000
Güncelleme: 15 Şubat 2021

CLS

Bu komut çalıştırıldığında daha önceden ekrana yazılmış olan yazılar silinir.
Genelde programlar, ilk olarak ekranı temizleyerek, sonraki yazılacaklara temiz bir ekran hazırlar.

Burada dikkat edilecek şey CLS den bir önceki zemin rengi ne ise ekran o renk ile doldurulur.
CLS den önce bir renk ayarı yapılmamışsa ekran siyah renk ile doldurularak temizlenir.

COLOR , 4 'Zemin rengi kırmızı
CLS
PRINT "Merhaba"
COLOR 14 'Yazı rengi sarı
PRINT "Dünya !"

Değişkenlere Veri Aktarmak

Veri tiplerini açıklarken değişkenlerden bahsetmiştik. Değişkenler, bilgisayarın belleğinde veri tutmak için kullanılır.
Değişkenler bir harf ile başlayıp 40 karaktere kadar bir isim alabilir.
Değişken adlarında İngilizce harfler ve rakamlar kullanılır. Bunların dışındaki karakterler kabul edilmez.

Değişken adı bir harf ile başlamalıdır.
Büyük-küçük harf ayırt edilmez. SOYADI, soyadi , Soyadi , SoyAdi , soyAdi , SoyADI  aynı değişken adıdır. soyadı İngilizcede ı harfi olmadığından kabul edilmez.

Hata oluşturan değişken adlarına örnekler:

DIM 4KAT 'Rakam ile başlamış. Bir harf ile başlamalı
DIM MÜŞTERİ 'Türkçe harfler (Ü,Ş,İ) kullanılmış. İngilizce harfler kullanılmalı
DIM PERSONEL NO 'boşluk karakteri kullanılmış. Boşluk karakteri kabul edilmez
DIM Adi.Soyadi ' Adi adlı bir veri tipi tanımlaması yoksa hata verir.
DIM MEDENI_DURUMU '_ karekteri kullanılmış. Kabul edilmez.

LET

Değişkenlere değer aktarmak için kullanılan fonksiyondur. Eski BASIC program kodlarıyla uyum içindir.

28 Eylül 2019 Cumartesi

EXCEL: DÜŞEYARA ile soldan bilgi bulma

Excelde DÜŞEYARA formülü tablodaki veya satır aralığındaki öğeleri bulmamız gerektiğinde kullanılır.
En basit haliyle DÜŞEYARA kullanımı:
= DÜŞEYARA (aramak istediğiniz; aranacak tablo; tablodaki sütun numarası; 1/DOĞRU veya 0/YANLIŞ)

4. parametrede;
1/DOĞRU: yaklaşık olarak,
0/YANLIŞ: tam bir eşleşme yapar.

Örnek:
Aşağıdaki öğrenci tablosundan okul numarasına göre arama yapılıp bulunan öğrencinin bilgilerini elde edilir.

I3 hücresinde Adı soyadı bilgisini elde etmek için
=DÜŞEYARA($I$2;$C$2:$F$11;2;)
formülü kullanıldı. Formülde I2 yerine $I$2, C2:F11 yerine $C$2:$F$11 kullanıldı bu işlem, formülü kopyaladığımızda hücre adresinin değişmemesi içindi.
4. parametre boş bırakıldı. Bu, 0 değerini girmekle aynıdır. Tam eşleşme yaparak arar.
Diğer örnekler ile Baba adı ve Doğum yeri bilgileri elde edilmiştir.
=DÜŞEYARA($I$2;$C$2:$F$11;3;)=DÜŞEYARA($I$2;$C$2:$F$11;4;)
Buraya kadar güzel ancak okul no'suna göre ya da öğrenci adına göre arama yapıp sınıfı bilgisini elde etmeye çalışırsak DÜŞEYARA formülü buna izin vermiyor. Çünkü aradığımız, sütunun sağ tarafından bilgi alabiliyoruz.

Tabloda soldan bilgi elde etmek istediğimiz bir durum olursa ne yapabiliriz?
Bunun için birkaç yöntem var.
En basit kullanımı aşağıdaki gibidir.

DÜŞEYARA formülündeki ikinci parametreye tabloyu direkt olarak değilde ELEMAN ile dolaylı olarak aktarılıyor.
=DÜŞEYARA(I2;ELEMAN({1;2};D2:D11;C2:C11);2;0)
ELEMAN formülü tabloyu bellekte yeniden oluşturuyor formüldeki {1;2} ile 2 sütunlu bir tablo olacağını belirtiyor.
1. sütunu olarak D2:D11 (Adı soyadı),
2. sütunu olarak solundaki C2:C11 (No) seçiliyor.
Böylece Adı soyadı ve No'dan oluşan yeni tablo oluşuyor.

DÜŞEYARA formülü ile oluşan bu yeni tabloda arama yapıp sonuç elde ediyoruz.
Esasında yine DÜŞEYARA ile aradığımızın sağından bilgi elde etmiş oluyoruz.
Sınıfı bilgisini elde etmek için ELEMAN ile bir tablo oluşturuyoruz 2 sütunlu.
1. sütun D2:D11 (Adı soyadı)
2. sütun B2:B11 (Sınıfı)
Oluşan bu tablodan DÜŞEYARA ile Adı Soyadını arayıp Sınıfı bilgisini elde ediyoruz.
=DÜŞEYARA(I2;ELEMAN({1;2};D2:D11;B2:B11);2;0)