在下面的函数中(我还没有测试过),我需要移动数组中的值,然后相应地调整数组的大小,问题是,取决于我们是在索引中向上还是向下移动值需要先调整数组大小或移动值。正如你所看到的,我有一个 If
语句,其中有用于移动和调整大小的凹处,但两种情况都有相同的情况(仅交换了行的顺序),是否有一种更干燥的方式来编写那?
Private Function Update_Index(index As Interger, move As Integer) As Boolean
Dim last As Integer
last = UBound(Var_array, 2)
If move < 0 Then
ReDim Preserve Var_array(2, last + move)
For i = index - 1 To last
Var_array(i, 1) = Var_array(i + move, 1)
Var_array(i, 2) = Var_array(i + move, 2)
Next i
Else
For i = index - 1 To last
Var_array(i, 1) = Var_array(i + move, 1)
Var_array(i, 2) = Var_array(i + move, 2)
Next i
ReDim Preserve Var_array(2, last + move)
End If
End Function
注意:在这种情况下,重复似乎无害,但我预计会出现更大的代码块来满足此类需求。
最佳答案
创建一个子例程以通过引用传递数组。
Private Sub Update(ByRef array as variant, ByVal index as long, ByVal move as long)
For i = index - 1 To ubound(array)
Var_array(i, 1) = Var_array(i + move, 1)
Var_array(i, 2) = Var_array(i + move, 2)
Next i
End Sub
Private Sub Update_Index(index As Interger, move As Integer) As Boolean
If move < 0 Then
ReDim Preserve Var_array(2, last + move)
Update Var_array, index, move
Else
Update Var_array, index, move
ReDim Preserve Var_array(2, last + move)
End If
End Function
您可能可以提取另一种方法,但我不确定为什么您根据移动大小前后ReDim
。
关于vba - DRY方式切换执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26391182/