userform textbox yüzde % sorunu

netvolxxx

Altın Üye
Katılım
29 Ağustos 2023
Mesajlar
194
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
15-04-2027
merhaba arkadaşlar bi türlü çözemediğim bir sorun var bi çözüm bulamadım nedir bunun mantığı.


textbox1 de birim fiyatı = 70.010,00 ₺
textbox 2 de toplam fiyat = 70.010,00 ₺

textbox 3 yüzde olarak hesaplama yapıp yazdırdığım alan
textbox 3 alanına 30 yazdım = 70.010,00 ₺ üzerinde %30 ekleyip hesaplama yaptırınca sonuç doğru geliyor textbox2 alanına gelen sonuç 91.013,00 ₺



textbox 3 alanına 32 yazdığımda toplam fiyat gelen sonuç 924.132,00 hatalı olarak getiriyor...

doğrusu sonuç 92.413,20 ₺

textbox 3 alanına tam sayı yazdığım zaman sorun yok örnek:10-20-30-40-50-60 gibi.
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
832
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Bu durumu çözebilmek için öncelikle hesaplamanın nasıl yapıldığını anlamak önemli. Görünüşe göre textbox3 alanına girilen yüzde değerine göre textbox2’de toplam fiyat hesaplanıyor. Ancak, tam sayı girildiğinde doğru sonuç gelirken, ondalık sayı içeren değerlerde hata oluşuyor.

Olası hata kaynakları:
  1. Ondalık ayracı yanlış işleniyor olabilir – Yani 32 yerine 3.2 veya 32.0 gibi yanlış bir formatla hesaplanıyor olabilir.
  2. Matematiksel işlem sırasındaki veri tipi hatası – Girilen yüzdeyi yanlış yorumlayan bir string veya integer çevirme hatası olabilir.
  3. Hesaplama formülündeki hata – Yanlış bir işlem sonucu ortaya çıkabilir. Doğru hesap:
70.010+(70.010×32%)=92.413,2070.010 + (70.010 \times 32 \%) = 92.413,20
Eğer sistem yanlışlıkla 70.010 × 32 şeklinde işlem yapıyorsa 2.240.320 gibi büyük bir rakama ulaşabilir ve ardından yanlış bir toplam döndürebilir.

Çözüm önerileri:
1- Ondalık ayracı kontrol edin: Sistem, yüzdeyi tam sayı değil ondalık sayı olarak yanlış okuyabilir.
2- Textbox3 alanının veri tipini doğrulayın: İçindeki değerin integer (tam sayı) olarak mı, yoksa string (metin) olarak mı işlendiğini kontrol edin.
3- Hesaplama kodunuzu gözden geçirin: textbox3’teki değeri yüzde olarak hesaplamak için doğru çeviri yapılıyor mu? Örneğin, doğru formül şu olmalı:

double birimFiyat = 70010.00;
double yuzde = Convert.ToDouble(textbox3.Text) / 100;
double toplamFiyat = birimFiyat + (birimFiyat * yuzde);
textbox2.Text = toplamFiyat.ToString("N2"); // 92.413,20 ₺ gibi formatlanmalı

Bunları kontrol ettiğinizde sorunun nereden kaynaklandığını anlayabilirsiniz.
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
681
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
merhaba arkadaşlar bi türlü çözemediğim bir sorun var bi çözüm bulamadım nedir bunun mantığı.


textbox1 de birim fiyatı = 70.010,00 ₺
textbox 2 de toplam fiyat = 70.010,00 ₺

textbox 3 yüzde olarak hesaplama yapıp yazdırdığım alan
textbox 3 alanına 30 yazdım = 70.010,00 ₺ üzerinde %30 ekleyip hesaplama yaptırınca sonuç doğru geliyor textbox2 alanına gelen sonuç 91.013,00 ₺



textbox 3 alanına 32 yazdığımda toplam fiyat gelen sonuç 924.132,00 hatalı olarak getiriyor...

doğrusu sonuç 92.413,20 ₺

textbox 3 alanına tam sayı yazdığım zaman sorun yok örnek:10-20-30-40-50-60 gibi.
dosyanızı paylaşın. sebebini burdan bulmak zor. cDbl değişkeni tanımlanmamış olabilir. ₺ simgesi biçi olarak mı var değer olarak mı. orda hata oalbilir.
 

netvolxxx

Altın Üye
Katılım
29 Ağustos 2023
Mesajlar
194
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
15-04-2027
Bu durumu çözebilmek için öncelikle hesaplamanın nasıl yapıldığını anlamak önemli. Görünüşe göre textbox3 alanına girilen yüzde değerine göre textbox2’de toplam fiyat hesaplanıyor. Ancak, tam sayı girildiğinde doğru sonuç gelirken, ondalık sayı içeren değerlerde hata oluşuyor.

Olası hata kaynakları:
  1. Ondalık ayracı yanlış işleniyor olabilir – Yani 32 yerine 3.2 veya 32.0 gibi yanlış bir formatla hesaplanıyor olabilir.
  2. Matematiksel işlem sırasındaki veri tipi hatası – Girilen yüzdeyi yanlış yorumlayan bir string veya integer çevirme hatası olabilir.
  3. Hesaplama formülündeki hata – Yanlış bir işlem sonucu ortaya çıkabilir. Doğru hesap:
70.010+(70.010×32%)=92.413,2070.010 + (70.010 \times 32 \%) = 92.413,20
Eğer sistem yanlışlıkla 70.010 × 32 şeklinde işlem yapıyorsa 2.240.320 gibi büyük bir rakama ulaşabilir ve ardından yanlış bir toplam döndürebilir.

Çözüm önerileri:
1- Ondalık ayracı kontrol edin: Sistem, yüzdeyi tam sayı değil ondalık sayı olarak yanlış okuyabilir.
2- Textbox3 alanının veri tipini doğrulayın: İçindeki değerin integer (tam sayı) olarak mı, yoksa string (metin) olarak mı işlendiğini kontrol edin.
3- Hesaplama kodunuzu gözden geçirin: textbox3’teki değeri yüzde olarak hesaplamak için doğru çeviri yapılıyor mu? Örneğin, doğru formül şu olmalı:

double birimFiyat = 70010.00;
double yuzde = Convert.ToDouble(textbox3.Text) / 100;
double toplamFiyat = birimFiyat + (birimFiyat * yuzde);
textbox2.Text = toplamFiyat.ToString("N2"); // 92.413,20 ₺ gibi formatlanmalı

Bunları kontrol ettiğinizde sorunun nereden kaynaklandığını anlayabilirsiniz.
örnek dosyayı hazırlayıp göndercem ayrıca şunuda ilave etmek istiyorum,
bu yapılan işlemler çalışma sayfasında doğru hesaplıyor
userform üzerinde listbox ta var orda da doğru getiriyor değerleri sadece bu textbox2 alanına hatalı getiriyor.

cevap yazan arkadaşlardan teşekürr ederim önerilerini denicem...
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
832
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Kod:
Private Sub TextBox3_Change()
   
    If Not IsNumeric(Me.TextBox1.Value) Or Not IsNumeric(Me.TextBox3.Value) Then
        Me.TextBox2.Value = ""
        Exit Sub
    End If

    Dim birimFiyat As Double
    Dim yuzdeOran As Double
    Dim toplamFiyat As Double
   
    birimFiyat = CDbl(Replace(Replace(Me.TextBox1.Value, "?", ""), ".", ", "))   
    yuzdeOran = CDbl(Me.TextBox3.Value)   
    toplamFiyat = birimFiyat * (1 + (yuzdeOran / 100))   
    Me.TextBox2.Value = Format(toplamFiyat, "#,##0.00 ?")

End Sub
birde böyle denermisiniz
 

netvolxxx

Altın Üye
Katılım
29 Ağustos 2023
Mesajlar
194
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
15-04-2027
Kod:
Private Sub TextBox3_Change()
  
    If Not IsNumeric(Me.TextBox1.Value) Or Not IsNumeric(Me.TextBox3.Value) Then
        Me.TextBox2.Value = ""
        Exit Sub
    End If

    Dim birimFiyat As Double
    Dim yuzdeOran As Double
    Dim toplamFiyat As Double
  
    birimFiyat = CDbl(Replace(Replace(Me.TextBox1.Value, "?", ""), ".", ", "))  
    yuzdeOran = CDbl(Me.TextBox3.Value)  
    toplamFiyat = birimFiyat * (1 + (yuzdeOran / 100))  
    Me.TextBox2.Value = Format(toplamFiyat, "#,##0.00 ?")

End Sub
birde böyle denermisiniz
denemedim hocam da olmadı değişen bir şey yok ben textboxları değerleri listbox üzerinden aldırıyorum.
yeni bir textbox ekleyip nasıl geliyor diye denemek istedim değerleri kullandığım kodlar

urunsyf.TextBox22.Value = urunsyf.ListBox3.Column(10)
TextBox22.Value = Format(TextBox22.Value, "currency")
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
832
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Anladığım kadarıyla, ListBox3 üzerinden aldığınız değeri TextBox22'ye aktarıyorsunuz ve formatlama yapmak istiyorsunuz. Ancak sorun yaşadığınız nokta, veriyi doğru şekilde işleyip gösterememek aşağıdakileri kontrol ediniz

ListBox3'ten Doğru Veri Çekme: ListBox3.Column(10) doğrudan doğru bir değeri döndürüyor mu? Eğer ListBox3'de onuncu sütun yoksa hata verebilir.
Değeri Formatlama Öncesi Doğrulama: urunsyf.TextBox22.Value'yi bir değişkene atayıp, formatlamadan önce çıktıyı bir MsgBox ile kontrol edebilirsiniz:

Dim deger As Variant
deger = urunsyf.ListBox3.Column(10)
MsgBox "Çekilen değer: " & deger

Eğer değer boş veya beklenmeyen bir formatta çıkıyorsa, kodun ListBox'tan veri çekme kısmını tekrar gözden geçirmekte fayda var.

TextBox22.Value = Format(CDbl(TextBox22.Value), "#,##0.00 TL") formatı bu şekildede deneyebilirsiniz

Ancak CDbl dönüşümünü kullanırken, TextBox'ın içinde mutlaka sayısal bir değer olup olmadığını kontrol etmek gerekebilir. Eğer sayı değilse hata oluşacaktır.
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
681
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
denemedim hocam da olmadı değişen bir şey yok ben textboxları değerleri listbox üzerinden aldırıyorum.
yeni bir textbox ekleyip nasıl geliyor diye denemek istedim değerleri kullandığım kodlar

urunsyf.TextBox22.Value = urunsyf.ListBox3.Column(10)
TextBox22.Value = Format(TextBox22.Value, "currency")
Hocamm dosya paylassaydiniz simdiye çözülmüştü
 

netvolxxx

Altın Üye
Katılım
29 Ağustos 2023
Mesajlar
194
Excel Vers. ve Dili
2013 Türkçe
Altın Üyelik Bitiş Tarihi
15-04-2027
Anladığım kadarıyla, ListBox3 üzerinden aldığınız değeri TextBox22'ye aktarıyorsunuz ve formatlama yapmak istiyorsunuz. Ancak sorun yaşadığınız nokta, veriyi doğru şekilde işleyip gösterememek aşağıdakileri kontrol ediniz

ListBox3'ten Doğru Veri Çekme: ListBox3.Column(10) doğrudan doğru bir değeri döndürüyor mu? Eğer ListBox3'de onuncu sütun yoksa hata verebilir.
Değeri Formatlama Öncesi Doğrulama: urunsyf.TextBox22.Value'yi bir değişkene atayıp, formatlamadan önce çıktıyı bir MsgBox ile kontrol edebilirsiniz:

Dim deger As Variant
deger = urunsyf.ListBox3.Column(10)
MsgBox "Çekilen değer: " & deger

Eğer değer boş veya beklenmeyen bir formatta çıkıyorsa, kodun ListBox'tan veri çekme kısmını tekrar gözden geçirmekte fayda var.

TextBox22.Value = Format(CDbl(TextBox22.Value), "#,##0.00 TL") formatı bu şekildede deneyebilirsiniz

Ancak CDbl dönüşümünü kullanırken, TextBox'ın içinde mutlaka sayısal bir değer olup olmadığını kontrol etmek gerekebilir. Eğer sayı değilse hata oluşacaktır.
Yardımlarınız için teşekkür ederim sorunum çözüldü sayfada yuvarlama yaptırdığım zaman sorun ortadan kalktı....
 
Üst