Anasayfa | Akademik Forum | Sizden Gelenler | Sipariş
Menü Açıklamaları
Sorular - Cevaplar
Makaleler
Makrolar
Yerleşik İşlevler
Animasyonlar
Yumurtalar
Fonksiyonlar
MTK Programlar
ExcelCE
Dosya İndir
Neler Yaptık?
İletişim
Sorular - Cevaplar
Soru-Cevap 61 - M. Temel Korkmaz 

Bir UserForm'umuz var. İçerisindeki bir TextBox'a para miktarı giriyoruz. Bu işlemi daha basitleştirmek icin veriyi TextBox'a girerken her üç rakamın arasına bir nokta koyan bir makroyu nasıl yapabiliriz?
Bu soruya genel itibarı ile aşağıdaki gibi cevaplar verilbilir.

Private Sub TextBox1_Change()
  Me.TextBox1.Value = Format(Me.TextBox1.Value, "###,###")
End Sub

Private Sub TextBox1_Change()
    TextBox1 = Format(TextBox1, "###,0")
End Sub

İşlemin gerçek çözüm ve açıklaması ise aşağıda verilmektedir. Nedenine gelince, soru aşağıdaki gibi devam edecektir.

"Yukarıdaki sorunun devamı olarak;
Userform'da bulunan TextBox'ları yukarıdaki makro ile binlik ayracı yaptık, ancak TextBox'ların toplama yapmak istenildiğinde toplama hatalı oluyor çözüm."

1. TextBox nesnesi adı üzerinde, yani Metin kutusu demektir. İçerisine yazdığınız her karakteri öncelikle metin olarak algılar.

2. "+" işleci her ne kadar matematiksel bir işleç olsa da bazı alanlarda "&" işlecinin vazifesi olan birleştirme görevini görür.

Şimdi bu iki maddeyi bir arada düşündüğümüzde, TextBox1 ve TextBox2 ye yazdığımız rakamların TextBo3'te toplanması yerine birleştirilmesinin mantığını anlamış oluruz. Dolayısı ile neden toplamada yapmıyor da çarpma ve çıkartmada yapıyor sorusunu engellemiş oluruz değil mi?

Eğer TextBox içerisinde kullanacağınız rakamlara binlik ayracı uygulayacaksanız o halde büyük bir sayı yazacaksınız demektir. Şimdi aşağıdaki örneği uygulamalı olarak deneyiniz.

Örnek

Bir UserForm üzerine 3 adet TextBox nesnesi ve 1 adet CommandButton nesnesi yerleştirin.

Aşağıdaki kodları UserForm'unuza kopyalayın.

Private Sub CommandButton1_Click()
  Dim t1 As Double
  Dim t2 As Double
 
  t1 = TextBox1.Value
  t2 = TextBox2.Value
 
  TextBox3 = t1 + t2
End Sub

Private Sub TextBox1_Change()
  TextBox1 = Format(TextBox1, "###,0")
End Sub

Private Sub TextBox2_Change()
  TextBox2 = Format(TextBox2, "###,0")
End Sub

Siz isterseniz TextBox3'ü de formatlayabilirsiniz.

Ne Yaptık?

t1 ve t2 adında iki değişkeni büyük sayı formatında tanımladık. Toplanacak TextBox'ların Value'sini bu tanımladığımız değişkenlere atadık. Böylece TextBox'lar içerisine yazılmış olan sayısal karakterleri metin algılamasından kurtarmış olduk. Sonra da textBox3'te bunları toplattık.

İşin özü ve açıklaması burada.
Bunu neden uzun uzun anlattım?
Çünkü yukarıda bahsettiğimiz iki yöntem çözüm olmakla birlikte, programcılık anlayışı olarak biraz anlaşılmaz. Ben bunu açıklamaya çalıştım.

Umarım faydalı olmuştur.

Destek
M.ÖZTÜRK - Y.KARAMAN
Bu siteyi, "Hayatını çocuklarının Ahlâklı ve Dürüst yetişmesi için harcamış olan Cefakar ve Fedakar, Canım ANNEM'e adadım."
Copyright © 1998-2011 M. Temel Korkmaz - Tüm hakları saklıdır.