循环后将值保存在数组中,以便可以再次使用这些值

时间:2018-09-05 08:47:01

标签: excel vba excel-vba

我正在使用一个数组,其值在循环中计算,如下所示:

Sub btnEnter_click()
Dim partno As String
Dim batch1 As String
Dim start1 As Integer
Dim left1(5 To 248) As Integer
Dim m As Integer
Dim taken(5 To 248) As Integer
Dim vlookres As String

On Error Resume Next
For m = 5 To 248
    partno = Sheet5.Range("A" & m)
    batch1 = Sheet5.Range("B" & m)
    start1 = Sheet5.Range("D" & m)
    vlookres = Application.VLookup(partno, Sheet3.Range("A5:C46"), 3, False)
    If vlookres = "" Then
        vlookres = 0
    End If

    taken(m) = taken(m) + vlookres
    vlookres = 0
    If taken(m) >= batch1 Then
        taken(m) = 0
    End If
    If left1(m) = 0 Then
        left1(m) = start1 - taken(m)
    Else
        left1(m) = left1(m) - taken(m)
    End If
    Sheet5.Range("E" & m) = left1(m)
 Next m

Sheet3.Cells.Range("C5:C46").ClearContents     

结束子

数组 left1 是批次中剩余的数量,其目的是向用户显示批次中剩余的数量。我正在使用此if语句来计算应显示的内容。

If left1(m) = 0 Then
        left1(m) = start1 - taken(m)
    Else
        left1(m) = left1(m) - taken(m)
    End If

因此,第一次运行时, left1 的值始终为0,它将使该值脱离批处理中的起始金额( start1 )。然后我想做的是,如果不是第一次运行,那么应该存储剩余的值,以便可以从最后一个 left1 值中减去所取的值。例如。批处理从100( start1 = 100)开始,用户取10( taken(m) = 10),然后 left1 = 90。很好,因为它是第一次运行。但是,如果用户在此之后的另一个时间再取15,则应该从90中取15,结果为75。情况并非如此,因为 left1(m)在子级结束后被重置表示显示的结果是85。反正是否有将值存储在 left1 中以使其按说明工作的方法?

2 个答案:

答案 0 :(得分:2)

如果将Dim left1(5 To 248) As Integer更改为Static left1(5 To 248) As Integer,则在第二次运行btnEnter_click子过程时,将实例化left1并使用第一次运行子过程后数组中剩余的值填充left1

我无法从您的代码中确定您打算如何使用重复值。

答案 1 :(得分:1)

您可以将变量设置为Static,就像@Jeeped回答的那样,也可以在过程外部创建公共变量:

Public left1(5 To 248) As Integer

Sub MySub
    'Your code here
End Sub