• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Overflow hatası

Katılım
8 Haziran 2007
Mesajlar
401
Excel Vers. ve Dili
excel fonksiyonlar
Forumda emeği geçen herkese merhaba. Arkadaşlar aşağıdaki kodlarda runtime
error'6' overflow hatası alıyorum. Acaba değişkenlere yanlış tip mi yükledim diye düşündüm. Sitede bu konudaki yanıtların büyük çoğunluğu double tipini
kullanmış. Long da hatta variant da denedim olmadı. Kodlar verilerini hücrelerden alıyor ve sanırım sorun bu noktada. Hata veren yerdeki işlem değerleri değişkenlere karşılık gelecek şöyle: (43*6)/18 bu işlemin sonucu 14.333333333333 diye gidiyor. Sanırım hatayı bundan dolayı veriyor ama nasıl düzeltebileceğimi de bilemiyorum. İlgilenen arkadaşlara şimdiden teşekkürler. :)



Dim topmçs As Byte
Dim topp As Byte
Dim sonxmçs As Byte
Dim aldığı2 As Byte
Dim t2sonxperformans As Double
Dim almasıgereken2 As Double

topmçs = WorksheetFunction.Sum(Range("CF24:CG24"))
topp = syf2.Range("CJ24")
sonxmçs = WorksheetFunction.Sum(Range("CF24:CG24"))
almasıgereken2 = (topp * sonxmçs) / topmçs
aldığı2 = syf2..Range("CJ24")
t2sonxperformans = aldığı2 / almasıgereken2
syf2.Range("FL12") = Round(t2sonxperformans, 2)
 
4 adet "Byte" tipi değişkenler dikkatimi çekti.
Gerçekten bunlar 0-255 arası değer mi alıyor?

"Byte" tipi bu aralıktaki değerleri alabilir.
 
4 adet "Byte" tipi değişkenler dikkatimi çekti.
Gerçekten bunlar 0-255 arası değer mi alıyor?

"Byte" tipi bu aralıktaki değerleri alabilir.

Evet hocam bu konuda bir sıkıntı yok. Kodlar normalde çalışıyor. Mesela 6 ya değil de 5'e bölsem sorun yok. Sorun sanırım devreden sayıdan kaynaklanıyor.
Onu da Roun ile aşmaya çalıştım gene olmadı.
 
Peki, "Debug" dediğinizde sarı şerit hangi satırın üzerinde bekliyor?
 
Peki, "Debug" dediğinizde sarı şerit hangi satırın üzerinde bekliyor?

Kırmızı ile işaretlediğim yer hocam. İmleci değişkenlerin üzerine getirdiğimde değerler de görünüyor. Hata verdiği yerde yaptığı işlem koddaki değişkenlere karşılık gelecek şekilde şu : (48*6)/18
(topp * sonxmçs) / topmçs
topp = 48 ,sonmçs =6 , topmçs = 18 sarıya boyalı satırda tüm bu değerler de görünüyor.
 
Input tipleri değiştirmenizde fayda var.. Testi inceleyin.

Kod:
Sub test()
[COLOR=DarkGreen]'Dim topmçs As Byte
'Dim topp As Byte
'Dim sonxmçs As Byte
'Dim aldığı2 As Byte
'Dim t2sonxperformans As Double
'Dim almasıgereken2 As Double[/COLOR]

topmçs = 18 [COLOR=DarkGreen]'WorksheetFunction.Sum(Range("CF24:CG24"))[/COLOR]
topp = 48 [COLOR=DarkGreen]'syf2.Range("CJ24")[/COLOR]
sonxmçs = 6[COLOR=DarkGreen] 'WorksheetFunction.Sum(Range("CF24:CG24"))[/COLOR]
almasıgereken2 = (topp * sonxmçs) / topmçs

MsgBox "almasıgereken2 : " & TypeName(almasıgereken2)
MsgBox "topmçs : " & TypeName(topmçs)
MsgBox "sonxmçs : " & TypeName(sonxmçs)

[COLOR=DarkGreen]'aldığı2 = syf2.Range("CJ24")
't2sonxperformans = aldığı2 / almasıgereken2
'syf2.Range("FL12") = Round(t2sonxperformans, 2)[/COLOR]
End Sub
 
Bu da yardımda belirtilen açıklama...
Overflow (Error 6)
An overflow results when you try to make an assignment that exceeds the limitations of the target of the assignment. This error has the following causes and solutions:


  • The result of an assignment, calculation, or data type conversion is too large to be represented within the range of values allowed for that type of variable. Assign the value to a variable of a type that can hold a larger range of values.
  • An assignment to a property exceeds the maximum value the property can accept. Make sure your assignment fits the range for the property to which it is made.
  • You attempt to use a number in a calculation, and that number is coerced into an integer, but the result is larger than an integer. For example:
  • Kod:
    Dim x As Long: x = 2000 * 365   ' Error: Overflow
    To work around this situation, type the number, like this:
Kod:
Dim x As Long     
x = CLng(2000) * 365
Konuyu toparlarsak;
Byte değerlerin sonucu Byte sınırını geçerse Error döner.

"Fakat sonuç Byte?"
*** Çünkü, İşlemin ilk aşamasında çarpma işlemi Byte'ı aşıyor. Çarpma sonucu, değişken tanımından dolayı sıfır döner.

*** Aynı hata, iki integer'in çarpımının sonucu integer'i aştığında da oluşur. Ancak biri Long olarak dönüşüme uğrarsa hata dönmeyecektir.
 
Input tipleri değiştirmenizde fayda var.. Testi inceleyin.

Kod:
Sub test()
[COLOR=DarkGreen]'Dim topmçs As Byte
'Dim topp As Byte
'Dim sonxmçs As Byte
'Dim aldığı2 As Byte
'Dim t2sonxperformans As Double
'Dim almasıgereken2 As Double[/COLOR]

topmçs = 18 [COLOR=DarkGreen]'WorksheetFunction.Sum(Range("CF24:CG24"))[/COLOR]
topp = 48 [COLOR=DarkGreen]'syf2.Range("CJ24")[/COLOR]
sonxmçs = 6[COLOR=DarkGreen] 'WorksheetFunction.Sum(Range("CF24:CG24"))[/COLOR]
almasıgereken2 = (topp * sonxmçs) / topmçs

MsgBox "almasıgereken2 : " & TypeName(almasıgereken2)
MsgBox "topmçs : " & TypeName(topmçs)
MsgBox "sonxmçs : " & TypeName(sonxmçs)

[COLOR=DarkGreen]'aldığı2 = syf2.Range("CJ24")
't2sonxperformans = aldığı2 / almasıgereken2
'syf2.Range("FL12") = Round(t2sonxperformans, 2)[/COLOR]
End Sub

Hocam ilginiz ve emeğiniz için çok teşekkür ederim. Byte ları işaret ederek içime şüphe düşürdünüz . İyiki de düşürmüşsünüz. Byte ları Integer yaptım sorun düzeldi. Kodların o kısmından şüphelenmek hiç aklıma gelmemişti.7 nolu mesajda yazdıklarınız çok eğitici ve öğretici oldu. Sonuç byte ama arada taşma var. İlginiz ve emeğiniz için tekrar teşekkürler. :)
 
Son düzenleme:
Rica ederim, kolay gelsin. ;)
 
Geri
Üst