6 Mart 2015 Cuma

2-3-4 Mart



Cuma gününden başlayarak yapılan alışverişlere göre puanların nerede ne nasıl kullanıldığını belirten bir liste hazırladım. İlk önce müşterilere(ilk 5'i) ve sonra da mağazalara göre (en çok alışveriş yapılan ilk 5 mağaza) olarak listeyi düzenledim. İlk önce müşterilere sonra da mağazalara göre listeyi düzenledim. Bittikten sonra hepsini bir mailde toplayarak analize aldım ve departmandaki çalışanlara gönderdim.

İnsert'ün yeni sayısı çıktığı için far ürünlerinin bir listesini çıkardım. SMS'lerin gönderilmesi için listeyi hazırlamaya başladım. İlk önce insertten ürünlerin nerede olduklarını ve insertte nasıl yazıldığını bularak onları listeye geçirdim. Ürünlerin bulundukları kategorilere göre düzenleyerek, ürünlerin fiyatlarını, nerede satışa sunulacağını yazarak gönderime hazır hale getirdim. SMS gönderimini sağlayan kişilerde kontrollerini yaparak SMS gönderdiler. Örnek Tam senlik oldugunu dusundugumuz Sutas Yogurt 3kg 7,9TL! 5-18 Mart'ta Migros ve Tansaslarda

28 Şubat 2015 Cumartesi

Excel Soru-Cevap Vol16

Soru: Mantığı çok basit olan bir toplama işlemini yapamadım. Basic mantığından herkes " i= i+k " örneği bilir. Ben bunu Excel'de D10 hücresin formül bölümüne " =C10+D10 " şeklinde yazıyorum fakat Excel bunu bir türlü hesaplayamıyor.Circular reference hatası veriyor.Bu kadar basit bir işlemi nasıl yapamaz.

Cevap: Bu gayet normal. Formülü yazdığınız hücreyi referans vermişsiniz. Yani Excel'e şunu söylüyorsunuz. D10 hücresine de C10 ile D10 'u topla. D10 hücresindeki veri her toplamada değişir. Yani C10 1 olsun D10 da 2 Bunun normal toplamı 3 olacaktır. Ama siz referans olarak D10 hücresini verdiğiniz için her değişmede tekrar D10 u hesaba katacak. Döngüsel bir başvuru oluşacak. Hem sonra sizin verdiğiniz i=i+k örneği buna uygun değil. Bir atama yapıyorsunuz. Burada. eğer VBA sayfasına da, Range("D10")=Range("C10")+Range("D10") yazsaydınız. Problem olmazdı. Sizin de dediğiniz i=i+k örneğine uygun olurdu.
SONUÇ: Formül yazdığınız bir hücreyi formül içerisinde kullanamazsınız (genelde) kullanırsanız bu tür bir hata ile karşılaşırsınız.
Şimdi gelelim sorunuzun doğru cevabına. Aşağıdaki kodu eğer hesaplatma yapmak istediğiniz sayfanın koduna yazarsanız, istediğiniz sonuca ulaşırsınız.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$10" And Target.Value <> 0 Then
Range("D10").Value = Range("D10").Value + Range("C10").Value
End If
End Sub

Excel Soru-Cevap Vol15

Soru: Excel'de hazırlanan bir dosyayı program haline (exe, com) dönüştürmek istiyorum. Bu mümkün mü? Amaç hazırlanan sayfa haricinde bilgilerimin kullanılmamasını sağlamak.

Cevap:  Öncelikle hemen belirtmeliyim ki sorunuzun cevabı olumsuzdur. Yani Excel'de hazırladığınız bir programı .exe ya da .com uzantılı dosya haline dönüştüremezsiniz.
Excel kullandığı halde programlama mantığını tam olarak kavrayamamış bir çok arkadaşımız ilk zamanlarda bu şekilde düşünmekte ve hazırladıkları programları kullanışlı hale getirmek istemektedirler.
Unutulmamalıdır ki Excel Uygulaması kendi haline bir Uygulama (Application)'dır. Kendine has kullanmış olduğu birimleri mevcuttur. WorkBook ana nesnesinin ve bu ana nesneye bağlı Worksheet, Range/Cells nesnelerinin çalışması için hazırladığınız her programın Excel.Exe uygulamasına ihtiyacı bulunmaktadır. Dolayısıyla tekrarlamak gerekirse Excel.Exe uygulaması olmadan Excel'de hazırladığınız bir programı Visual Basic ya da Delphi gibi Programlama dillerinde olduğu gibi derleyerek özerk bir program şekline dönüştüremeyiz.
Bu konu ile ilgili bir açıklamayı daha önce yapmıştım. Aşağıya tekrar alıyorum.

Excel Bir Form'dur
Bazı yeni arkadaşlarımız ve yine bazı eski arkadaşlarımız ısrarla Excel'i çalışmalarında saklamaya çalışıyorlar. Buna anlam vermekte zorlanıyorum doğrusu. Programlarının daha profesyonelce görünmesi için bu işi yaptıklarını tahmin ediyorum. Peki bu ne kadar doğru?
Bu hiç doğru değil. Öncelikle bunun bilinmesinde fayda var.
VB'de yapılan bir çalışmayı düşünün. Sonuçta menülerin bulunduğu bir form yapmak için genelde insanlar çırpınırlar. Hatta araç çubuukları eklemek için de çaba sarfedilir. Sonrada bu ana formun içerisine yardımcı formlar eklenir ve bu menülere tıklayarak bu formlar açılır. Vs vs vs.
İşte Excel'in de Ekran görüntüsü bir Formdur sonuçta. Üzerine ızgaralar eklenmiş, menüler ve araç çubukları eklenmiş mükemmel bir formdur. Büyük olasılıkla VB'deki ana form hangi kod yapısıyla hazırlanmışsa, Excel uygulama formu da aynı yapıyla hazırlanmış. Bizler uğraşmayalım diye de bütün her şey tamamlanmaya çalışılmıştır.
Ama daha sonra Excel'e bir UserForm olayı eklenmiştir. Aynı VB'deki alt formlar gibi. Şimdi karmaşa burada yaşanıyor. Excel'in gücü karşısında pek fazla işe yaramayan bu UserForm'lar sanki esas şeylermiş gibi bunların üzerinde işlem yapılıyor ve Excel gizlenmeye çalışılıyor.
Bu işi yapmadaki tek amaç, kendini tatmin ve güzel gösterme duygusudur. Bir süre sonra bu duygunun gereksizliği anlaşılıyor. Eğer anlaşılmıyor ise demek ki daha çok mesafe katedilememiş.
Bu yazımda anlattıklarımdan UserForm kullanmayalım manası çıkartılmamalı. UserFormlar artık Excel'in vazgeçilmezidir. Ama asla Excel değildirler. Her şeye gerektiği kadar değer verilmelidir.
***
Peki Çözüm Nedir? Neler yapmalıyım?
Bu sorulara cevap aramak gerekirse, şimdilik en kolay ve kullanışlı yolu öneririm. XLS olarak hazırladığınız dosyanıza bir menü yolu ekledikten sonra XLA olarak Farklı Kaydedin ve eklenti haline getirin. Dolayısı ile Çalışma Sayfalarınıza kimse müdahale edemeyecektir.

Daha detaylı çözümler ise Geliştiriciler düzeyindedir. Yeri geldiğinde gerek Hazırladığımız kaynak kitaplarda gerekse sitemizde bunlardan da bahsedeceğiz.

Excel Soru-Cevap Vol14

Soru: Excel'de çizilen bir şeklin genişliği neden 1 cm olamaz?Sorunun cevabını okuduğunuzda bir kaç sorununda cevabını almış olacaksınız.

Cevap: Uzun zamandır Excel sayfasında animasyon yapmıyordum. Bunun nedeni de anlama veremediğim atlamalardı. Bu atlamaların nedenini bir türlü kavrayamadım. Bu bana göre enteresan bir durum.
Bu pozisyonu şekillerde de yaşadığımı fark edince animasyon yapma olayından tamamen vaz geçmiştim. (Tabi bu aralar düşündüğüm farklı bir tarz var elbette animasyon için).

Konunun aslına dönecek olursak.
Excel'e bir şekil çizin. Bu Çizgi ya da Dikdörtgen veya Elips olabilir. Ya da Dosyadan eklediğiniz herhangi bir resim olabilir.
Bu resim ya da şekle çift tıklayarak gelen pencereden Boyut sayfa sekmesini seçin ve Genişlik kısmına "1" rakamını girip Tamam düğmesine tıklayın. Daha sonra bu şekle tekrar tıklayın ve yine aynı genişliğe gözatın sonucun "1,01" olduğunu göreceksiniz.
Maalesef Excel'de bir çizgi 1 cm uzunluğunda olmuyor.

Neden?
Eğer hatırlarsanız daha önce de bir şey söylemiştim. Aslında Excel'de görünen kılavuz çizgiler yok. Yani Excel her ne kadar hücre hücre görünse de asıl yapı hiç bir zaman böyle değil. Bildiğiniz gibi Ekran Çözünürlüğü dendiğinde 800x600 Piksel gibi bir ifade kullanırız. İşte Excel'deki hücre aralıkları da tam olarak bu mantıkla hareket ediyor. (Şimdi konuyu bilenler -e yani bravo- diyecekler ama demesinler çünkü bu yazdıklarım bilmeyenlere yöneliktir.)
Şimdi Sütun başlıklarını fare ile sağa sola genişletmeye veya daraltmaya çalışın. Herkesin aşina olduğu sarı bir açıklama kutusu içerisinde sütunun genişliği belirtilmektedir. Bir tanesi parantez içerisinde ve Piksel cinsinden. İşte işin sırrı burada. Excel ile mesafeleri ancak Piksel olarak ayarlayabiliyoruz. Şimdi çözüme gelelim.

1 İnç = 2,54 cm olduğunu ortaokuldan itibaren biliyoruz.
1 inç = 96 Piksel'dir yani 1 inç = 2,54 cm = 96 Piksel

Şimdi şunu yapalım.
1. Çizim Araç Çubuğu | Çiz | Uydur | Klavuza'yı işaretleyin.
2. Herhangi bir hücreyi 96 Piksel olacak kadar genişletin.
3. 96 Piksel olan bu hücreye bir çizgi çizin.
4. Çizginin üzerine çift tıklayarak boyutuna bakın. 2,54 cm olduğunu göreceksiniz.

Pekala şimdi basit bir matematik işlemi yapalım. Eğer 96 piksel 2,54 cm ise kaç piksel 1 cm eder. (Ters gibi oldu ama formülde düzelteceğim)

 
2,54 cm = 96 Pixel
1 cm = x Pixel
------------------------
1 cm = 37,795 Pixel

İşte mesele çözüldü. Siz hiç bir zaman satır aralığını 37,795... Piksel olarak ayarlayamazsınız. Çünkü piksel ayarı 36, 37, 38, 39 olarak gider.
Olayın aslı tamamen budur.