Noktaları VBA Kullanarak AutoCAD’den CSV Dosyasına Dışa Aktarma

Bu makalemde sizlere AutoCAD’den verileri bir CSV dosyasına dışa aktarmak için,  basit bir VBA’nın nasıl kullanılacağını anlatacağım. Bu gerçekten çok kolay ve aynı amaca ulaşabilen başka yollar da olmasına rağmen, bu yol size bir hayli esneklik sağlamakta ve bu oldukça çok yönlüdür.

Öncelikle, içerisinde birkaç nokta olan bir çizim hazırlayacağım. Aşağıdaki çizimdeki bu noktalar dışa aktaracağımız nesneler olacaklar:

 Sekil-1

Sonraki adım VBAIDE komutunu kullanarak VBA düzenleme penceresini açmaktır. Tabi ki, şayet AutoCAD 2010 veya daha üst sürümü kullanıyorsanız,  VBA eklentisini indirme ihtiyacı duyacaksınız. VBA düzenleme penceresini açtığınızda, proje araştırıcısı “project explorer“ penceresine sağ tıklayın ve yeni bir modül yaratın.

Şimdi gelelim koda….. Kodu sizlere açıklayacağım. Aşağıdaki kodun içerisinde üstten kesme (') işareti ile başlayan satırları sizlere kodun sonraki satırının ne işlem yapacağını açıklamak için yerleştirdim. Şayet yine de anlamadığınız yerler olur ise, yorum yazarak sormaktan çekinmeyin.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

Option Explicit

Sub ExportPoints()

 'Değişkenleri deklare etme

 Dim currentSelectionSet As AcadSelectionSet

 Dim ent As AcadEntity

 Dim pnt As AcadPoint

 Dim csvFile As String

 Dim FSO As FileSystemObject

 Dim textFile As TextStream

 'Aktif olarak seçili olan nesnelerin seçim setine referans yaratma

 Set currentSelectionSet = ThisDrawing.ActiveSelectionSet

 'Seçili nesne olup olmadığını kontrol etme ve şayet seçili nesne yok ise, uyararak çıkış verme

 If currentSelectionSet.Count = 0 Then

 ThisDrawing.Utility.Prompt "Hiç seçili nesne yok    

Dışa aktarmak için, birkaç nokta seçin ve bu komutu tekrar çalıştırın." & vbNewLine

End If

'Aktif seçim setindeki tüm öğeleri taramak için, For Each döngüsünü kullanma

For Each ent In currentSelectionSet

'Burada, ent seçili öğelerden bir tanesi olacaktır.

'Şayet ent bir noktasal nesne değilse, onu ihmal etmemiz gerekmektedir

If TypeOf ent Is AcadPoint Then

'Sadece noktalar (noktasal nesneler) seçilecektir.

'Artık sadece noktasal nesneler ile ilgilendiğimizi biliyoruz.

' Belirli AcadPoint tipindeki değişkenleri kullanabiliriz.

Set pnt = ent

'Bunu yaptıktan sonra daha birçok değişkene sahip olduğunuzu fark edeceksiniz

'"pnt." Yazdığınız zaman, otomatik kod tanımlama metotlarını görürsünüz

'CSV dosyası dizgi değişkenine satır ekleme.

'İki sayıyı aralarına virgül koyarak birleştiriyoruz;

've satırı tamamlamak için, sona yeni bir satır karakteri ekliyoruz

csvFile = csvFile & pnt.Coordinates(0) & "," & pnt.Coordinates(1) & vbNewLine

' csvFile = csvFile & demek, bir dizgi değişkeninin sonuna sürekli yeni bir satır eklemenin

'kullanışlı bir yoludur.

End If

Next

' csvFile değişkenini C:\ sürücüsünün altına dosya adı ile aynı isimle yazdırma

'FileSystemObjects değişkeni dosyaları işlemek için gerçekten faydalıdır.

'Fakat VBA projenizde Microsoft Betik Çalışma Ortamına “Microsoft Scripting Runtime“ referansa ihtiyaç-

‘duyacaksınız.

'Menüden Tools>References, komutuna gidin ve Microsoft Scripting Runtime betik çalışma ortamını seçin.

'Yeni bir Dosya Sistem Nesnesi yaratma

Set FSO = New FileSystemObject

'FSO.CreateTextFile değişkenini kullanarak, bir metin dosyası olan csvFile.csv dosyasını yaratma,

've bu csvFile.csv metin dosyasını textFile değişkeninde depolama (kaydetme).

Set textFile = FSO.CreateTextFile ("C:\csvFile.csv")

'Dizgi olan csvFile değişkenini bir yazı dosyasına yazdırma

textFile.Write csvFile

'İşimizi bitirdikten sonra yazı dosyasını kapatma.

textFile.Close

'Dosyanın yaratıldığı konusunda kullanıcıyı uyarma

ThisDrawing.Utility.Prompt "Noktalar C:\csvFile.csv dosyasına dışa aktarılmıştır!" & vbNewLine

End Sub

Evet, artık CSV dosyasını yarattık. Tabi ki, şayet isterseniz, bu koda daha fazla koşul da ekleyebilirsiniz. – şöyle ki, kodun ortasına sadece kırmızı noktaları filtreleyen diğer bir IF döngüsü yerleştirebilirsiniz. Ayrıca seçilecek nesneler sadece noktalar da olmayabilir;– bu kod herhangi bir AutoCAD nesnesinin herhangi bir özelliğiyle de çalışacaktır.