2012-09-18 177 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