Excel ve AutoCAD – Cennette Yaratılmış Uyum (2. Kısım)

Birçok AutoCAD kullanıcısı programlama ile elde edilebilen harika sonuçlardan hala habersiz. Şayet AutoCAD ‘de kod yazma umutlarınızı yitirdiyseniz, yazmış olduğum bir VBA kodunu – ki bu kodu yazana dek elle yapmak zorunda olduğum işler için ümidimi yitirmek üzereydim aşağıda sizlerle paylaşacağım. Genellikle bana saatler – evet SAATLER hatta belki de günler kazandıran 5-6 satırlık küçük kodlar yazardım. AutoCADkullanıcılarının VBA kodları yazma konusunu öğrenmekten neden kaçındıklarını gerçekten çok merak ediyorum. Sanırım bu kod yazma işinin gerçekten çok zor olduğunu düşünüyorlar; ama gerçekten göründüğü kadar zor değil bu iş!

Bu makalemde Microsoft Excel VBA’da AutoCAD ‘i kontrol eden kodu nasıl yazacağınızı anlatacağım. Öncelikle, haydi Microsoft Excel’de VBA açalım. Excel açıkken VBA IDE (bütünleşik geliştirici ortamını) açması gereken Alt tuşu ile birlikte F11 tuşlarına (Alt+F11) basın. Şayet bütünleşik geliştirici ortamı açılmazsa, Excel’de Araçlar “Tools” menüsü altında >Makro “Macro” içerisinde >Visual Basic Düzenleyicisi “Visual Basic Editor” komut düğmesini seçerek bu bütünleşik geliştirici ortamını açabilirsiniz. Şayet Excel 2007 ve üst sürümlerinden birini kullanıyorsanız, bu komut düğmesini bulmak için gerçekten biraz uğraşmanız gerekecektir. Öncelikle Excel Seçeneklerine gidip; Geliştirici Sekmesini “Developer Tab” şeritte göster işaretleme kutusunu işaretlemeniz gerekecektir.

Evet, artık biraz kod yazabilecek duruma geldik. Sol tarafta ( bilgisayarınıza göre sağda da olabilir),  Proje Yöneticisi “Project Explorer” olarak adlandırılan bir kısım olmalıdır. Burada Sheet1, Sheet2, Sheet3 ve bir tanesi de ThisWorkbook olarak adlandırılmış olan bazı öğeler görüyor olmalısınız. Bu alana sağ tıklayın ve Modülü Ekle “Add Module” seçeneğini seçin. Bu işlem kodumuzu yazabilmemiz için bize bir alan yaratacaktır. Şayet biraz risk almayı seven biriyseniz, bu modülü istediğiniz bir isimle yeniden isimlendirebilirsiniz. Modülü düzenlemek için modüle çift tıklayın.

Şimdi AutoCAD‘e bir şeyler yaptırabilmek için, gerekli elemanları görelim.

Şayet önceden hiç programlama yaptıysanız, değişkenlere sahip olduğunuzu biliyorsunuzdur ve değişkenler çeşitli tiplerde olabilirler. Bu tipler basit olabilecekleri gibi; nesne olarak bilinen daha karmaşık yapılar olabilirler. AutoCAD ihtiyacımız olan tüm nesne tiplerini içeren kendi tip kütüphanesine sahiptir. Bu kütüphaneyi uygulamamız içerisine yüklemek çok faydalı olacaktır. Bunu yapmak için, Araçlar “Tools” menüsü içerisinde >Referanslar “References” komutunu çalıştırın. VBA penceresine gidin ve AutoCAD 2010 Tip Kütüphanesi – veya hangi AutoCAD sürümünü kullanıyorsanız; o sürüme ait – olarak adlandırılan seçeneği arayın. Bu işlem önceden kullanılabilir durumda olmayan bazı değişkenleri kullanılabilir duruma getirecektir.

Şimdi sıra temel koda geldi! Aşağıdaki kodu modülün içerisine yerleştirin ve VBA düzenleyicisinin en üstündeki Çalıştır “Run” düğmesine basın. Alt yordam isminin “Main” olmasının bir önemi yoktur. – Alt yordamı istediğimiz herhangi bir isimle çağırabiliriz.

Sub Main()
    Dim ACAD As AcadApplication 'Acad Uygulaması tipindeki ACAD değişkenini yaratır.
    Set ACAD = New AcadApplication ' ACAD değişkenini AutoCAD’in yeni bir örneğine eşitler.
    ACAD.Visible = True 'Yüklendiğinde, AutoCAD’i görünür olarak ayarlar.
    ACAD.ActiveDocument.Utility.Prompt "Excel’den Merhaba!" ' AutoCAD komut satırına "Excel’den Merhaba!" mesajını yazar.
End Sub

Burada AutoCAD’in yeni bir örneğini yaratıyorum ve ACAD değişkeninde AutoCAD nesnesine (uygulamasına) bir değer atıyorum; daha sonra sadece AutoCAD komut satırına LINE yazdırıyorum. Kolay değil mi? Tamam, ya her seferinde AutoCAD’in yeni bir örneğini açmak istemiyor ama bazı kodları çalıştırmak istiyorsak…….Bu sefer AutoCAD’in yeni bir örneğini açmak yerine, hâlihazırda çık olan AutoCAD’i referanslayan aşağıdaki kodu kullanabiliriz:

Sub Main()
    Dim ACAD As AcadApplication 'Acad Uygulaması tipindeki ACAD değişkenini yaratır.
    Set ACAD = GetObject(, "AutoCAD.Application") 'AutoCAD uygulamasının halihazırda çalışan örneğini açar
    ACAD.ActiveDocument.Utility.Prompt "Excel’den Merhaba!"  'AutoCAD komut satırına "Excel’den Merhaba!" mesajını yazar.
End Sub

Harika – artık AutoCAD’in hâlihazırda çalışan (açık olan) örneği ile bağlantı kurabiliriz. Bununla ilgili olarak yapmamız gereken son bir şey daha var. Şayet bu kodu AutoCAD programı açık değilken çalıştırırsak, bir hata mesajı alırız. Gerçekten bu istisnai durumu yok etmemiz gerekiyor – işte aşağıdaki kod böyle bir durumda işimize yarayacaktır:

Sub Main()
    Dim ACAD As AcadApplication 'Acad Uygulaması tipindeki ACAD değişkenini yaratır.
    On Error Resume Next 'VBA’ya hataları önemsememesini söyler.
    Set ACAD = GetObject(, "AutoCAD.Application") 'AutoCAD Uygulama sınıfının çalışan örneğini açar.
    On Error GoTo 0 VBA’ya hataları tekrar önemsemesini söyler.
    If ACAD Is Nothing Then 'Kodun yukarıdaki kısmının çalışıp çalışmadığını kontrol eder.
        Set ACAD = New AcadApplication 'ACAD değişkenini AutoCAD’in yeni bir örneğine eşitler.
        ACAD.Visible = True 'Yüklendiğinde, AutoCAD’i görünür olarak ayarlar.
    End If
    ACAD.ActiveDocument.Utility.Prompt "Excel’den Merhaba!"  ' AutoCAD komut satırına "Excel’den Merhaba!" mesajını yazar.
End Sub

Bu kod öncelikle AutoCAD’in hâlihazırda açık olan örneğine bağlantı kurmayı dener. AutoCAD’in çalışan örneğine bağlantı kurmayı denerken meydana gelebilecek hataları gözden geçirmek için Hata durumunda Kaldığı yerden devam et “On Error Resume Next” ifadesini kullanıyoruz. Ayrıca hataları ihmal ettiğimizde eklediğimiz Hata durumunda 0 numaralı satıra git “On Error Goto 0” ifadesi de çok önemlidir. İlk bakışta tüm hataları gözden geçirmek için, kodlarımızın hepsinde en başa Hata durumunda Kaldığı yerden devam et “On Error Resume Next” ifadesini eklemenin iyi bir fikir olduğunu düşünebilirsiniz. Fakat bu yazılımcının yazdığı programın hatalarını ayıklayıp bulmasını çok daha zorlaştıracaktır. Aşırı Hata durumunda Kaldığı yerden devam et “On Error Resume Next” ifadesi kullanımı genellikle kötü programlama uygulaması olarak düşünülmekle birlikte; kontrol temelinde bu ifadenin kullanımı sorun değildir ve yukarıdaki örnekte olduğu gibi hatalarımızı bulmada bize yardımcı olacaktır.

GetObject fonksiyonunu çağırdıktan sonra, ACAD değişkeni ya AutoCAD nesnemize ulaşım sağlayan bir bağlantı içerecek ya da AutoCAD nesnemize ulaşım sağlayamayacak olan Boş “Nothing” değerine sahip olacaktır. İkinci durumda, birinci örnekte açıklanan metodu kullanarak yeni bir AutoCAD örneği yaratacağız.

Evet, buraya kadar geldik.

Haydi şimdi gerçekten faydalı bir şeyler yapalım. Excel programını açın ve Sheet1 isimli çalışma sayfasında A sütununda X ve B sütununda Y koordinat değerleri olacak şekilde A ve B sütunlarını doldurun. Aşağıdaki şekilde kopyala yapıştır yapabileceğiniz bazı veriler görüyorsunuz; isterseniz bu verileri kullanabilirsiniz:

3
7
5
2
3
4
5
6
7
8
8
8
5
3
1.6
1
1
1
1.6
3

 Excel’deki bir çalışma sayfasındaki verilere Sheet1.Cells(Row, Column)” ifadesini kullanarak ulaşabiliriz. Sheet1.Cells ifadesi aracılığı ile döngü kurabiliriz ve Excel hücrelerindeki içerikleri esas alarak işlemler yapabiliriz. Aşağıdaki küçük örnekte bu Excel hücrelerindeki içerikleri esas alarak işlemler yapma işinin nasıl olacağı bulabilirsiniz. Bu örnekte kullanılan döngü n değişkeninin değerini 1 den 10 a kadar birer birer arttıran For-Next döngüsü olarak bilinmektedir. Daha sonra sadece n numaralı satırdaki hücrede bulunan veriyi alıyoruz ve bu veriyi kullanarak AAutoCAD içerisine bir nokta yerleştiriyoruz. Şayet yukarıdaki verileri kullandıysanız, noktalardan meydana gelmiş bir gülen yüz görüyor olmalısınız!

Sub Main()
    Dim ACAD As AcadApplication ' Acad Uygulaması tipindeki ACAD değişkenini yaratır.
    On Error Resume Next 'VBA’ya hataları önemsememesini söyler.
    Set ACAD = GetObject(, "AutoCAD.Application") 'AutoCAD Uygulama sınıfının çalışan örneğini açar.
    On Error GoTo 0 'VBA’ya tekrar hataları ihmal etmemesini söyler.
    If ACAD Is Nothing Then 'Kodun yukarıdaki kısmının çalışıp çalışmadığını kontrol eder.
        Set ACAD = New AcadApplication 'ACAD değişkenini AutoCAD’in yeni bir örneğine eşitler.
        ACAD.Visible = True 'Yüklendiğinde, AutoCAD’i görünür olarak ayarlar.
    End If
    ACAD.ActiveDocument.Utility.Prompt "Excel’den Merhaba!" 'AutoCAD komut satırına "Excel’den Merhaba!" mesajını yazar.
    Dim Coords(2) As Double 'X ve Y koordinat değeri olmak üzere noktanın koordinatını belirleyen dizidir.
        Dim n As Integer 'Tam sayı olan n değişkenini yaratır.
    For n = 1 To 10 'n değişkeninin değerini 1 den başlayarak 10 a kadar birer birer artırmak suretiyle döngü kurar.
        Coords(0) = Sheet1.Cells(n, 1) '1. Sütundaki değeri Koordinatlar dizisine koyar.
        Coords(1) = Sheet1.Cells(n, 2) '2. Sütundaki değeri Koordinatlar dizisine koyar.
        ACAD.ActiveDocument.ModelSpace.AddPoint Coords 'AutoCAD’de o konuma bir nokta ekler.
    Next
End Sub

Evet, işte bu kadar – Excel’de VBA kullanarak AutoCAD’i kontrol etmeye giriş olarak yeterli olduğunu düşünüyorum. Aslında burada yaptığımız VBA’nın yeteneklerini sadece yüzeysel olarak inceledik. Fakat hayal gücünüzü kullanarak yapabileceklerinizin neredeyse sınırsız olduğunu unutmayın!