İş Emri Oluşturma Otomasyonu — VBA for Excel
Merhabalar,
Bu benim ilk yazım olacak. Aslına bakarsanız profesyonel çalışma hayatım boyunca yaptığım ilk kayda değer VBA projesi de diyebiliriz. Dilerim beğenirsiniz. Öneri ve tavsiyelerinize de talibim. Hadi başlayalım;
Teknik kumaş üreten bir tekstil firmasında çalışıyorum. Üründen ürüne değişmekle beraber değer akış haritamız oldukça dallı budaklı. Yarı mamüller ürün olana kadar çok defa farklı ve parametreleri sürekli değişen operasyonlardan geçmekte ve bu da ürünlerimizin barkodlarının yanında aynı üretimden olan ürünler için ‘seri numarası’ ‘iş emri numarası’ gibi unique bir ID numarasını zorunlu kılmaktadır. İlk olarak bu projeye neden ihtiyacım olduğundan bahsetmek istiyorum. Kullandığımız ERP sisteminin üretim modülü ihtiyaçlarımızı karşılama konusunda biraz zorluk çekiyor. Bahsettiğim ID numarasını bize sağlayamamakta. Ve geçmişe dönük veri analizini hatta sisteme veri girişini çok zorlaştırmakta. Bunun yanında yapılası planlanan işler kara düzen bir şekilde operatörlere iletilmekte.
Bu gibi sorunların önüne geçmek amacıyla ‘ÜRETİM TAKİP FORMU’ adlı bir form oluşturdum ve bu sorunların önüne geçmiş bulunmaktayız. En azından dijitalleşme yoluna girdiğimizde önümüzde bir taslak olacaktır.
Küçük bir özetle program şu şekilde çalışıyor;
Kullanıcıdan bazı veriler alıyoruz. Bu verilerle takip formunun birkaç hücresini doldurduktan sonra form veritabanından otomatik veri çekip iş emrini oluşturuyor. Üretilen her iş emrine unique bir iş emri numarası atıyor ve bu numarayı “İş Emri Veritabanı” nda tutuyor. Algoritmanın sonunda ise iş emri formunun diğer bir değişle takip formunun çıktısını alıyor.
Size öncelikle formumuzu ve forma veri girişi yapmak için kullanılacak olan ‘userform’u tanıtmak isterim;
Yeşil renkle dolgulandırılmış hücreler verilerini; ‘userform’ üzerindeki ‘ÜRÜN ADI’ ‘EN GİRİNİZ’ ‘METRAJ GİRİNİZ’ ‘MÜŞTERİ ADI’ ve ‘HEDEF EN GİRİNİZ’ text ve comboxlardan almaktadırlar.
Dolgusuz beyaz alanlar operatörden alınacak veri bölümlerini işaret eder.
Sarı renkle dolgulandırılmış hücreler verilerini; userformdan gelen ‘ürün adı’ ve ‘ürün eni’(örn. ≥280) hücrelerindeki iki değeri çok kriterli düşeyara mantığıyla indis formülü ile aşağıda bulunan ‘REÇETE VERİTABANI’ adlı tablomuzdan çekmektedirler.
Comboboxlar verilerini diğer bir sayfada oluşturduğum tablolardan almaktadırlar.
Bu yapılan projenin önemli noktası daha önce de belirttiğim gibi verilen her bir iş için yeni unique bir iş emri numarası atanmasıdır.
Solumuzda bulunan ‘İş Emri Veritabanı’ adlı tablomuz mevcut sistem ile çıkartılmış belirli verileri userform üzerinde bulunan ‘İŞ EMRİ OLUŞTUR’ butonuna basılmasıyla bu veritabanına kaydediyor.
Normalde planlarımda bu tarz bir veri tabanı tutmak yoktu fakat iş emri numarasını unique tutabilmek için oluşturmam gerektiğini fark ettim. Muhtemelen farklı bir yolu vardır ama yazılımcı olmadığım için pratik çözümlere vakıf değilim. Paylaştığım ilk fotoğraftaki mavi renkli hücreler de arka planda çalışan kod ile otomatik olarak doldurulmaktadır. Buyurun sizlere buton tıklama kodunu tanıtayım;
Yukarıda paylaştığım iş emri veritabanı tablosu “İş Emri Veritabanı” adlı sayfada bulunuyor. Ve bu sayfayı ‘wsIsEmri’ adlı bir değişkene atadım. Arkasından ‘wsDeneme’ adlı yeni bir Worksheet değişkeni atadım. Bunu neden yaptığımı şimdi açıklayacağım. Muhtemelen bunu da yapmama gerek yoktu yazılımsal cahilliğimden kaynaklı üretmek zorunda kaldığım bir çözümdü.
iRow ve fRow değişkenleri ise veri tabanına giriş yapılırken verinin hangi satıra girileceğini belirten parametrelerdir. iRow = satır bazında tarama yapıp yukarıdan aşağıya doğru en son dolu satırı bulup +1 değeri ile bir altındaki hücreyi yani yeni veri girişi yapılacağı zaman hangi satıra yapılacağını ifade eder.
fRow ise iş emri numarasını unique tutabilmek için bulduğum bir çözümdü. Birazdan aşağıda bahsedeceğim değer arama metodlarında kullanılacaktır.
Yorum satırlarında kodların çalışma prensibi belirttim. Algoritmanın işleyişi yorum satırlarındaki gibidir.
Ürünlerimizi yaşam döngüleri boyunca görecekleri operasyon sayılarına göre sınıflandırdık ve bu operasyon sayıları ile ‘1 OP’ ‘2 OP’ yeni çalışma kitabı sayfaları açmak durumunda kaldık. Her sayfada operasyon sayılarına göre ilk paylaştığım görseldeki ‘TAKİP FORMU’ içeriği aynı kalmakla beraber operasyon bölümü kopyalanarak artmaktadır. Userform üzerinden kullanıcı amir tarafından girilen operasyon sayısı verisi ‘OPSayisi’ adlı comboboxa girilmektedir. Ve bu kodun kısa özeti combobox’taki input değerini al sayfalar arasında eşit olan sayfayı aç. Hücreleri seç ve kopyala.
Yeni bir sayfa oluştur ve adını “Deneme” olarak değiştir. Arkasından ‘wsDeneme’ adlı değişkeni bu sayfaya ata. Ve az önceki sayfada kopyaladığın veriyi bu yeni sayfaya yapıştır.
Userform üzerinden iş emri girişi yapan amir elinden alınan verileri bu yeni sayfada takip formu üzerinde belirtilen hücrelerin içerisine yazdır. Ek olarak mavi renkle dolgulandırılmış tarih bölümüne de şu anın tarih ve saat bilgilerini yazdır.
Unique olarak oluşturulan iş emri numarasının kodu bu kısımda ilk üç satırda yer almaktadır;
wsIsEmri değişkenine atanmış (İş Emri Veritabanı) worksheeti seç.
A1:E1 hücreleri arasında değeri “İş Emri No” ya eşit olan hücreyi bul ve SEÇ.
Satır ve sütun parametreleri: fRow yani yukarıdan aşağıya en son dolu satırın koordinatı(en son yazılan iş emri numarası) ve select operatörüyle seçmiş olduğun “İş Emri No” değerli hücrenin sütun koordinatına denk gelen hücrenin değerini al +1 ile topla ve yeni açtığın “Deneme” adlı sayfada (kopya takip formunun bulunduğu sayfa) X3 hücresine yeni iş emri numarası olarak yazdır.
Sonra iRow yani yukarıdan aşağıya en son dolu satırdan bir sonraki satır ve “İş Emri Numarası”nın bulunduğu sütun değerine denk gelen hücreye az önce wsDeneme X3 hücresine girdiğin değeri yazdır.
Arkasından aynı işlemler iş emri veritabanındaki diğer sütun değerleri için tekrarlanacak.
Tasarladığım takip formunun tek A4 sayfasına sığması için sayfayı ve yazdırma ayarlarını ölçeklendirmek ve yapılandırmak zorunda kaldığım için SAYFA_OLCEKLENDIR( ) diye bir modül oluşturmuştum. Burada o modülü çağırıp wsDeneme sayfası için çalıştırıyoruz.
Ve iş emri formunu yazdırıyoruz.
Arkasından ActiveSheet e atanmış olan wsDeneme sayfasını silmek zorundayız çünkü algoritmayı tekrar çalıştırdığımda Deneme isimli sayfa orada olmamalı. Excel aynı isimli birden fazla sayfaya izin vermiyor ki çalışma kitabının şişmesini de istemeyiz. Sayfayı sildikten sonra userformu kapat.
Bu da böyle bir projeydi. Bu henüz ilk versiyonu ihtiyaç dahilinde değişecek ve kağıda ihtiyacımız kalmayana kadar evrilmeye devam edecek. İlk başta dediğim gibi öneri ve tavsiyelerinize talibim.
Esen kalın…