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

问题描述 投票:0回答:2

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

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(取(m)= 10)然后left1 = 90.这是第一次运行时工作正常。但是如果用户在此之后的另一个时间再取15,那么它应该从90得到15得到75.这不是这种情况,因为在子结束后left1(m)被重置意味着显示的结果是85。反正是否存储了left1中的值以使其按照描述工作?

excel vba excel-vba
2个回答
2
投票

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

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


1
投票

您可以将变量设为Static,如@Jeeped一样,或者您可以在过程外创建一个公共变量:

Public left1(5 To 248) As Integer

Sub MySub
    'Your code here
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.