VBA nedir ?

 


Visual Basic for Applications
(VBA), VB6'nın Microsoft Office programlarında kullanılan halidir. Diğer bir ifade ile Visual Basic programlama dilinin Excel'deki adı VBA'dır. Oldukça güçlüdür. VBA denilince aklınıza Excel'de makrolar gelebilir. Çünkü her bir makro kaydı temelde VBA kodları ile kaydedilir ve bu kodlar üzerinde istenilen değişiklikler ve düzenlemeler yapılabilir. Hatta makro kaydı yapmadan tamamen VBA kodları ile program yazılabilir.

Programlama işi herkese uymayabilir. Ancak, işiniz bilgisayar uygulamalarıyla çok fazla çalışmayı içeriyorsa ve genel olarak bundan memnunsanız, program kodu yazmayı sevip sevmediğinizi araştırmalısınız. Microsoft Office uygulamalarını kullanıyorsanız, biraz VBA öğrenmek bilgisayar programlamaya başlamanın en kolay başlangıç ​​noktasıdır. Kim bilir belki VBA dan sonra Visual Studio kurup VB.Net diline veya önceki yazımda bahsettiğim, çok iyi bir forum sitesi olan B4J ye geçebilirsiniz. 

Veya bir programlama diline başlamak istemeyebilirsiniz, benim gibi programcı olmayan ve fakat basit, nostaljik ve eğlenceli VBA basic kodlarından keyif alan biri de olabilirsiniz. 

Excel'de Alt+F11 tuşlarına basınca VBA penceresi açılacaktır. Excel'de Geliştirici sekmesinin gözükmesi için seçeneklerde, Geliştirici sekmesini tıklamak yeterli olacaktır.



VBA kodun çalışabilmesi için üstteki ekran görüntüsünde bulunan Güvenlik Merkezi (Trust Center) 'ne tıklayarak, ulaşacağınız Makro Ayarları aşağıdaki gibi olmalıdır.




İnternetten indireceğiniz .xlsm uzantılı dosyalar, güvenlik amacıyla açtığınız anda çalışmayacaktır. Eğer bu dosyaya güveniyorsanız, sağ klik ardından özelliklere tıkladığınızda çıkan pencerede Engellemeyi Kaldır seçeneğini tıklamak gerekiyor.





Program yazmak için boş bir Excel dosyası açıp, Farklı Kaydet'e tıkladıktan sonra .xlsm dosya tipini seçmeniz gerekiyor. VBA'da kolay bir şekilde aşağıdaki gibi kullanıcı formları da oluşturulabiliyor. 




Google veya Youtube'da VBA kelimesini aratınca, ister Türkçe ister İngilizce ne kadar çok eğitim videosu veya sitesi olduğuna inanamazsınız. VBA 30 yıldır kullanıldığından, ilgilendiğiniz herhangi bir konuyla ilgili çözümü kolayca buluyorsunuz. VBA konusu, dikkatimi Youtube'da izlediğim bir videoda çekti..




Markasını duymadığım bir PLC ile Excel sayfası tcp/ip (modbus TCP) bağlantısı kuruyor, PLC içindeki holding register değerleri, Excel'de gösteriliyordu. Sayfadaki Ostrosoft Winsock komponentini denemek isterseniz, Excel veya ofis versiyonunuz (2007-2013-2016-2019-2021...) farketmez ama Excel'in 32-bit olması gerekir. Hesap > Excel Hakkında butonuna tıkladığınızda en üstte Excel'in kaç bit versiyonuna sahip olduğunuzu görebilirsiniz. Yukarıdaki resmin altında bağlantısı olan Modbus TCP yazısındaki CommandButton1 butonunu oluştururken ActiveX Controls altındaki butonu kullanmalısınız.. VBA'ya giriş yapmak niyetiyle bu sayfayı incelerseniz, butonun Excel sayfasına eklenişini orada gösteriyor.. Excel hücresine birşey yazmak çok kolay :

Range("B5") = 100  'B5 hücresine 100 yazıyor

Cells(5,2) = 100  'Bu da B5 e 100 yazar.. satır, sütun mantığıyla

Okumak da öyle :

Dim i as Integer
i = Range("B5").Value   'B5 teki değer i değişkenine aktarıldı


Excel'iniz 32-bit ise yine aynı ücretsiz komponent (Ostrosoft) ile Novexx veya başka marka yazıcıya yazıcının kendi dilinde komutlar yollanabilmektedir. Gerekirse yazıcıya sorgulama yaparak yazıcıdan cevap alınabiliyor. Novexx yazıcının dili EasyPlug, Zebra yazıcının dili ZPL olarak geçmektedir. EasyPlug ile barkodları yazıcı sizin için oluşturacaktır. Easyplug text (etiket şablonu) dosyasını nasıl kolayca elde ettiğimizi bağlantıdaki yazımda anlatmıştım.. Olay şudur, Notepad ile açılabilen bu txt dosyasının içeriğini yazıcıya yollayabilmek için, VBA kodlama ile önce yazıcın ip adresi ve portu kullanılarak bağlantı kurulur, ardından text veya string bu porta (varsayılan 9100) basılır. Elinizde yazıcı olmayabilir, yine de Hercules programını yazıcı olarak kullanarak, VBA kodunuzu deneyebilirsiniz. Hercules de Tcp Server sekmesine gelin, port kutucuğuna 9100 yazın, ardından Listen a tıklayın, artık Hercules programı yazıcınız oldu, VBA dan yolladığınız bilgi Hercules ekranında gözükecektir. VBA dan Hercules e bağlanmak için ip adresi olarak 127.0.0.1 kullanmanız gerekecektir.

Windows sürücü kullanırsanız, Ostrosoft komponentine gerek kalmadan da Excel sayfasında yaptığınız etiket tasarımını yazıcıya yollayabilirsiniz. Ama bu durumda etikette barkod varsa barkodu kendiniz oluşturmalısınız. Code39 fontunu kullanarak basit bir şekilde VBA kullanmadan barkod oluşturulabiliyor. Diğer barkod çeşitleri için internette VBA kod örnekleri var. 

Yok ben bunlarla uğraşamam derseniz tabii ki NiceLabel ücreti karşılığında yardımınıza koşacaktır. Sadece Novexx yazıcılar için ücretsiz olan Free versiyonunu bu bağlantıdan indirebilirsiniz. Kurulum esnasında internete bağlı durumdayken Free seçeneği seçilmelidir. 

Basacağınız etikette sayaç varsa veya Excel'den satır okuyarak değişken bilgiler içeren bir etiket basma ihtiyacınız varsa Free versiyonu yetersiz kalmakta, en azından NiceLabel'ın Designer Express versiyonu gerekmektedir. Bu versiyon en ekonomik olan ücretli versiyondur. Eğer etiketinizdeki bir barkodun içinde örneğin seri no, son kullanma tarihi, Lot no gibi birkaç bilginin birleşmesi (concatenation) gerekiyorsa Designer Express yetersiz kalmakta, NiceLabel Designer Pro versiyonu gerekmektedir. Bir barkod okuyucu veya tartı ile entegrasyon gerekiyorsa Pro’nun bir üst versiyonu olan PowerForms Suite gerekmektedir. Bu versiyon, yazıcı sayısına göre lisanslanmakta olup yazıcı sayısı ne kadar fazla ise maliyet de o kadar artmaktadır. Anlayacağınız hangi versiyona ihtiyaç olduğu tamamen ihtiyacınıza göre değişmektedir. NiceLabel masaüstü çözümleri versiyonlarının detaylı karşılaştırma tablosunu bu bağlantıdan inceleyebilirsiniz. NiceLabel'ın ayrıca aylık üyelik sistemiyle çalışan bulut (cloud) çözümleri de mevcuttur.

NiceLabel’a alternatif olarak bir yazılım firmasına size özel bir .NET programı yaptırabilirsiniz fakat bu durumda da o yazılım firmasına göbekten bağlı olmuş olacaksınız, örneğin bir değişiklik istediğinizde sizden tekrar ücret talep edilecek veya işi yokuşa süren bir yaklaşımla karşılaşma olasılığınız artacaktır. NiceLabel hazır paket yazılım olduğundan bir kez yatırım yaparsınız, ilave lisans istemediğiniz sürece sizden tekrar ücret istenmez. 

Özet olarak, Ostrosoft komponenti ve VBA kodlama ile NiceLabel, Bartender gibi ücretli etiket oluşturma yazılımlarının sunduğu bazı özellikleri, kendiniz gerçekleştirme şansına sahip oluyorsunuz.. Yani un var, şeker var, 30 yıldır insanlığın kullandığı Excel (VB6,VBA) var.. Geriye helva yapmak kalıyor..

VBA öğrenmek için bakabileceğiniz Türkçe bir siteden aldığım alıntıyla yazıya son veriyorum :

"Evren, düşündüğünüzden değil, düşünebildiğinizden bile daha karmaşık bir yer" diyordu Brian Green, Zarif Evren adlı kitabında.

Aynı cümleyi Excel için de kurabiliriz. Hakikaten işin içine girdikçe önce kendinizin, sonra da başkalarının "Vay be, Excelde böyle birşey de mi yapılıyormuş!" dediğini, ve artık bir süre sonra hayret etmeyi bırakacağınızı söyleyebilirim :)


Java, .Net, Mobil, Big Data, Yapay Zeka aldı başını gidiyor, sen hala mı Excel öğreniyorsun ?

20 yıldır benzer şeyler duyarım, siz de duyacaksınız. Bunun nedeni basit: Birçok kişi Excel ile, özellikle de işin içine VBA girince neler yapılacağını bilmediği için böyle söylemlerde bulunabiliyorlar.

Şimdi şunu netleştirelim. Excel ile yapılacaklar bellidir, diğerleriyle yapılacak belli. Nasıl ki komşu şehre uçakla gitmiyor daha basit araç olan arabaları kullanıyorsak, küçük ve orta düzey çalışmalar için de Excel bize yeter.

Özetle, Excel ölmedi, hiç de ölmeyecek. Dünyanın en büyük forumu olan stackoverflow'da bugün itibarıyle en çok soru sorulan konu başlığı 1,5 milyon ile Javascript ve 1,3 milyon ile Java iken Excel+VBA ile ilgili sorulan soru miktarı 300 bin civarında olup, en çok sorulan konunun 1/5 'ine denk gelmekte, bence bu oldukça yüksek bir oran..

Yorumlar

Bu blogdaki popüler yayınlar

VBA - Mscomm (seri port) ile veri loglama

RJ45 2 - Novexx barkod yazıcıya, S7-1200 plc ile etiket yazdırma

Uzak I/O modülü olarak PLC kullanmak