TextBox Değerini Sayıya Çevirerek Peşinat Kontrolü Yapma

  • Konuyu başlatan Konuyu başlatan MESKO
  • Başlangıç tarihi Başlangıç tarihi
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

MESKO

Kullanıcı
Katkı: %0
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Private Sub TextBox127_Exit(ByVal Cancel As MSForms.ReturnBoolean)

TbNotU = ""

Peşinat = TextBox127 * 1
Toplam = TextBox108 * 1

If Peşinat > Toplam Then
TbNotU = "PEŞİNAT; TOPLAM'DAN BÜYÜK OLAMAZ"

Else
TextBox127.SetFocus

End If
End Sub


Herkese hayırlı ramazanlar,hayırlı sahurlar.
Yukarıdaki kod bloğunda;
Peşinat = TextBox127 * 1 satırında *1 yapılmaz ise kod doğru çalışmıyor. Nedenini açıklayabilirmisiniz?
Sorunumu çözdüm fakat bilgimi pekiştirme ve forumdaşlara faydalı olması için paylaşmak istedim.
 
Çözüm
Merhaba, "*1" olmadan kodun yanlış çalışmasının nedeni, TextBox içeriğinin her zaman metin (String) olarak gelmesidir. Peşinat ve Toplam tür belirtilmeden kullanıldığında Variant olur ve içlerinde bu metni tutar.

İki metin karşılaştırıldığında VBA sayıların büyüklüğüne değil, karakter sırasına bakar. Örneğin "900" > "1000" sonucu True döner, çünkü ilk karakterde 9, 1'den büyüktür. "*1" işlemi metni sayıya çevirdiği için karşılaştırma doğru sonuç verir.

Aynı işi açıkça CDbl ile yapmak ve odağı kutuda tutmak için Cancel = True kullanmak daha güvenlidir:
Kod:
Bu kodu görmek için giriş yapmanız gerekmektedir (4 satır). Giriş Yap
Merhaba, "*1" olmadan kodun yanlış çalışmasının nedeni, TextBox içeriğinin her zaman metin (String) olarak gelmesidir. Peşinat ve Toplam tür belirtilmeden kullanıldığında Variant olur ve içlerinde bu metni tutar.

İki metin karşılaştırıldığında VBA sayıların büyüklüğüne değil, karakter sırasına bakar. Örneğin "900" > "1000" sonucu True döner, çünkü ilk karakterde 9, 1'den büyüktür. "*1" işlemi metni sayıya çevirdiği için karşılaştırma doğru sonuç verir.

Aynı işi açıkça CDbl ile yapmak ve odağı kutuda tutmak için Cancel = True kullanmak daha güvenlidir:
Kod:
Bu kodu görmek için giriş yapmanız gerekmektedir (15 satır). Giriş Yap
Kod nasıl çalışır?
  1. Peşinat kutusu boşsa kontrol yapılmaz ve kutudan çıkılabilir.
  2. Peşinat sayıya çevrilemiyorsa uyarı yazılır ve Cancel = True ile odak kutuda kalır.
  3. CDbl iki değeri de sayıya çevirir; peşinat toplamdan büyükse uyarı yazılır ve odak yine kutuda kalır.
  4. Toplam kutusu henüz boşsa karşılaştırma yapılmaz, böylece kullanıcı kutuda kilitlenmez.
Notlar
  • Exit olayında odağı aynı kutuda tutmak için SetFocus yerine Cancel = True kullanılmalıdır.
  • CDbl bilgisayarın bölge ayarını kullanır; Türkçe ayarda 1500,5 doğru okunur. Val ise yalnız noktayı ondalık ayırıcı kabul ettiği için "1500,5" değerini 1500 olarak okur.
  • Değişkenleri Dim Pesinat As Double biçiminde tanımlamak da aynı dönüşümü sağlar; ancak kutu boşsa veya harf içeriyorsa hata verir, bu yüzden önce IsNumeric kontrolü yapılmalıdır.
 
Çözüm
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Geri
Üst