运行时错误9:数组

时间:2014-08-20 19:06:50

标签: excel vba

我是VBA编程的新手,正在尝试为RCC设计开发一个简单的代码。大多数值都是直接从Excel工作表中分配的。我收到的错误是"除以零"。** **中的行在调试时突出显示。似乎声明或循环存在一些问题,但我无法识别。请帮忙。 Thanx提前。代码如下:

    Private Sub CommandButton1_Click()
    Dim a As Double, b As Double, result As String, Mu As Double
    Dim i As Integer, j As Integer, c As Integer, Xu1, Xu, es, d, f, fs As Double
    Dim strain1(1 To 6) As Double, stress1(1 To 6) As Double 
    a = Range("E30").Value
    b = Range("O30").Value
    If a < b Then
       result = "Under Reinforced Section"
       Mu = Range("E32").Value * Range("E34").Value
    ElseIf a = b Then
       result = "Balanced Secction"
       Mu = Range("E32").Value * Range("E34").Value
    ElseIf a > b Then
       result = "Over Reinforced Section"
       j = 31
       For i = 1 To 6
         strain1(i) = Cells(j, 7)// loop to assign values in array from excel sheet
         j = j + 1
       Next
     j = 31
       For i = 1 To 6
         stress1(i) = Cells(j, 8)
         j = j + 1
       Next
       c = 1
       Xu1 = Range("O30").Value
       d = Range("E31").Value
       Do While c = 1
         Xu = Xu1
         **es = 0.0035 * (d - Xu) / (Xu)**// Shows error apparently Xu is taking value zero
         If Range("E22").Value = 250 Then
            fs = es * Range("E23").Value
            f = 0.87 * Range("E22").Value
            If fs > f Then
               fs = f
            End If
         ElseIf Range("E22").Value = 415 Then
            f = 0.696 * Range("E22").Value / Range("E23").Value
            If es > f Then
               For i = 1 To 6
                If es > strain1(i) And es < strain1(i + 1) Then// to locate es in the array and then interpolate
                 fs = stress1(i) + ((stress1(i + 1) - stress1(i)) / (strain1(i + 1) - strain1(i))) * (es - strain1(i))// linear interpolation formulae
                End If
               Next
            ElseIf es < f Then
               fs = es * Range("E23").Value
            End If
            Xu1 = Range("O29").Value * fs / (0.36 * Range("E21").Value * Range("E16").Value)
            If Xu1 = Xu Then
              c = 0
            End If
            Mu = 0.36 * Range("E21").Value * Range("E16").Value * Xu1 * Range("E34").Value
         End If
       Loop
     End If
     Range("O21").Value = Mu
     MsgBox result
     End Sub

1 个答案:

答案 0 :(得分:1)

strain1(1到6)有6个元素1到6,对于i = 6,你试图访问突出显示的行中的第7个元素(strain1(i + 1))。 (对于下一行中的stress1也是如此)