• DİKKAT

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

Overflow ve eksiye düşürme hatası

  • Konbuyu başlatan Konbuyu başlatan kacik
  • Başlangıç tarihi Başlangıç tarihi
Katılım
21 Nisan 2007
Mesajlar
36
Excel Vers. ve Dili
excel 2003 türkçe
Merhaba,

Ekte üzerinde çalıştığım bir dosya var, iki problemi aşamadım. zaman zaman overflow hatası veriyor nedenini bulamıyorum. Overflow hatası vermediği zamanlarda sarıyla işaretlediğim kolonlardaki sayıları eksiye düşürüyor.

Dosyada yapmak istediğimi anlatayım. Total adet ile sipariş alınan adet arasındaki fark 50 ve altındaysa Database sheetinde sırasını benim belirttiğim depolara 1 adet ekleme veya çıkartma yapsın. Örnek Total adet, total sipariş adedinden 40 fazlaysa Database sheetindeki "F" kolonundaki depolara sırasıyla 1'er adet eklesin. Ancak yukarıdaki iki sorunu aşamadım.

Yardımlarınızı bekliyorum
 

Ekli dosyalar

Dosyadaki makronuzu aşağıdaki ile değiştirerek deneyin. Hatanız i ve m değişkenlerinin başlangıç değerlerini yanlış yerde tanımlamışsınız. Değişiklikleri incelerseniz hatanızı anlayabilirsiniz.

Kod:
Sub Add_Remove_Qtys()
Set s1 = Sheets("database")
Set S3 = Sheets("dağılım")
Dim i As Integer, m As Integer, k, adr1 As Range
For x = 3 To S3.[A65536].End(3).Row
    If S3.Cells(x, 3).Value > S3.Cells(x, 5).Value And S3.Cells(x, 3).Value - S3.Cells(x, 5).Value <= 50 Then
        i = 2
        With Sheets("dağılım")
            Do Until S3.Cells(x, 3).Value = S3.Cells(x, 5).Value
                Set k = .Range("F2:IV2").Find(s1.Cells(i, 5).Value, , xlValues, xlWhole, , xlNext)
                Set adr1 = .Cells(x, k.Column)
                    adr1.Value = adr1.Value + 1
                    i = i + 1
                    [a1] = i
                Set k = .Range("F2:IV2").FindNext(k)
            Loop
        End With
    ElseIf S3.Cells(x, 3).Value < S3.Cells(x, 5).Value And S3.Cells(x, 5).Value - S3.Cells(x, 3).Value <= 50 Then
        m = 2
        With Sheets("dağılım")
            Do Until S3.Cells(x, 3).Value = S3.Cells(x, 5).Value
                Set k = .Range("F2:IV2").Find(s1.Cells(m, 6).Value, , xlValues, xlWhole, , xlNext)
                Set adr1 = .Cells(x, k.Column)
                    adr1.Value = adr1.Value - 1
                    m = m + 1
                    [b1] = m
                Set k = .Range("F2:IV2").FindNext(k)
            Loop
        End With
        
    End If
Next
MsgBox ("İşlem Bitti")
End Sub
 
Levent bey, yardımlarınız için gerçekten çok teşekkürler!! Büyük bir sorunu ortadan kaldırmış oldu. Overflow vermesinin nedenini anladım ancak eksiye düşen kısımları integerların yanlış yerde olmasından mı kaynaklanıyor yoksa başka bir sıkıntı mı var?
 
Rica ederim. Overflow hatası vermesinin sebebini şu şekilde açıklayalım. Değişkenleri integer olarak tanımlamışsınız. Bunun anlamı değişkenlerin en fazla 32767 değerini alabileceğidir. Ancak kod içinde hem i hemde m değişkeni döngü içinde tekrar baştaki değere döndürülmediği için sonsuz döngüye kalıp bu değeri aşıyor ve overflow hatası vermesine neden oluyor. Eksi vermesininde nedeni budur.
 
açıklama için teşekkürler!!!
 
Geri
Üst