我一直试图解决这个问题,但不能。我有以下VBA代码。运行时会出现“运行时错误6:溢出”。我想我已经为每个变量分配了一个正确的类型。请帮忙!!
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
每个单元格的结果可能介于0到1之间,最多可达8个小数位。 在此先感谢!!
答案 0 :(得分: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
答案 1 :(得分:2)
Dim a, b As Long
a未被声明为long它被声明为变体尝试这个:
Dim a as long, b as Long
修改强> 经过测试,它仍会产生Stack Overflow错误。但是,最好正确声明变量。
您也不需要这一行:
ThisWorkbook.Sheets("Sheet1").Activate
如果您声明UseTableBEA
,则可以减少代码:
Dim Ws1 as Worksheet
Set Ws1 = Sheets("UseTableBEA")
然后,您可以使用先前使用Ws1
ThisWorkbook.Sheets("UseTableBEA")