我正在使用一个数组,其值在循环中计算如下所示:
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中的值以使其按照描述工作?
如果将Dim left1(5 To 248) As Integer
更改为Static left1(5 To 248) As Integer
,则在第一次运行子过程后,第二次运行btnEnter_click子过程时,left1将被实例化并填充数组中剩余的值。
我无法从您的代码中确定您打算如何处理重复值。
您可以将变量设为Static
,如@Jeeped一样,或者您可以在过程外创建一个公共变量:
Public left1(5 To 248) As Integer
Sub MySub
'Your code here
End Sub