Rajat
Rajat

Reputation: 1

Run Time error 9:Array

I am new to VBA programming and am trying to develop a simple code for RCC design. Most of the values are assigned directly from the excel sheet. I am getting this error that says "division by zero".The line within ** ** is highlighted while debugging. it seems there is some problem with declaration or looping but i am not being able to identify. Pls help. Thanx in advance. The code is as follows:

    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

Upvotes: 0

Views: 35

Answers (1)

Stef
Stef

Reputation: 30579

strain1(1 To 6) has 6 elements 1 to 6, for i=6 you're trying to access a 7th element (strain1(i + 1)) in the highlighted row. (the same holds true for stress1 in the next line)

Upvotes: 1

Related Questions