2012-09-18 155 views
3

我一直在試圖解決這個問題,但不能。我有以下VBA代碼。運行時出現「運行時錯誤6:溢出」。我想我已經爲每個變量分配了一個正確的類型。請幫忙!!運行時錯誤6:溢出:Excel VBA

Sub UseCoeff() 
Dim a, b As Long 
Dim Value1 As Double 

ThisWorkbook.Sheets("UseTableBEA").Activate 
For b = 2 To 427 
    For a = 2 To 431 

     Value1 = ThisWorkbook.Sheets("UseTableBEA").Cells(a, b).Value/ThisWorkbook.Sheets("UseTableBEA").Cells(432, b).Value 
     ThisWorkbook.Sheets("UseCoeff").Cells(a, b).Value = Value1 

    Next a 
Next b 
End Sub 

每個小區將具有可以是8 0和1之間至多小數位的結果。 在此先感謝!

+0

您使用的是哪個版本的Excel?在Excel 2003中,你不能有427列... – Passerby

回答

3

如果ThisWorkbook.Sheets("UseTableBEA").Cells(432, b).Value是有史以來0,然後ThisWorkbook.Sheets("UseTableBEA").Cells(a, b).Value/ThisWorkbook.Sheets("UseTableBEA").Cells(432, b).Value將導致溢出錯誤,如果ThisWorkbook.Sheets("UseTableBEA").Cells(a, b).Value也爲0。

爲了避免這種情況,使用if語句來過濾出0,只需更新與實際邏輯的評論你想:

If ThisWorkbook.Sheets("UseTableBEA").Cells(432, b).Value = 0 Then 
    Value1 = 'Whatever you want but probably 0. 
Else 
    Value1 = ThisWorkbook.Sheets("UseTableBEA").Cells(a, b).Value/ThisWorkbook.Sheets("UseTableBEA").Cells(432, b).Value 
End If 
+0

只做了一些測試,如果我使用零,我得到一個'除以零'的錯誤,反對溢出錯誤。 –

+1

@AlistairWeir啊,我有些不準確。如果您將任何不是0的東西除以零,您會得到「除以零」錯誤。如果將0除以0,則會出現「溢出」錯誤。 –

+0

感謝Daniel!一如既往,你的建議奏效。 – user1671860

2

Dim a, b As Long

一個未聲明爲一個長時間被聲明爲一個變體試試這個:

Dim a as long, b as Long 

編輯: 經過測試,它仍然會產生堆棧溢出錯誤。然而,正確地聲明變量是一種好的做法。

你也不需要這行:

ThisWorkbook.Sheets("Sheet1").Activate 

,如果你申報UseTableBEA你可以瘦下來代碼:

Dim Ws1 as Worksheet 
Set Ws1 = Sheets("UseTableBEA") 

然後可以使用Ws1您以前使用ThisWorkbook.Sheets("UseTableBEA")

+0

謝謝Alistair!優秀的建議。 – user1671860