我正在使用一个数组,其值在循环中计算,如下所示:
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 中以使其按说明工作的方法?
答案 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