Vba 切换执行顺序的干燥方式
在下面的函数中(我还没有测试过),我需要移动数组中的值,然后相应地调整数组的大小,问题在于,根据我们是在索引中向上移动值,还是向下移动值,我需要首先调整数组的大小,或者移动值。正如你们所看到的,我有一个Vba 切换执行顺序的干燥方式,vba,excel,Vba,Excel,在下面的函数中(我还没有测试过),我需要移动数组中的值,然后相应地调整数组的大小,问题在于,根据我们是在索引中向上移动值,还是向下移动值,我需要首先调整数组的大小,或者移动值。正如你们所看到的,我有一个If语句,其中有一个用于移动和调整大小的cove,但两种情况都是相同的(只切换了行的顺序),有一种更简单的方法来写吗 Private Function Update_Index(index As Interger, move As Integer) As Boolean Dim last
If
语句,其中有一个用于移动和调整大小的cove,但两种情况都是相同的(只切换了行的顺序),有一种更简单的方法来写吗
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
私有函数将索引(索引为整数,移动为整数)更新为布尔值
最后变暗为整数
last=UBound(变量数组,2)
如果移动<0,则
雷迪姆保留变量数组(2,最后+移动)
对于i=索引-1到最后
变量数组(i,1)=变量数组(i+move,1)
变量数组(i,2)=变量数组(i+move,2)
接下来我
其他的
对于i=索引-1到最后
变量数组(i,1)=变量数组(i+move,1)
变量数组(i,2)=变量数组(i+move,2)
接下来我
雷迪姆保留变量数组(2,最后+移动)
如果结束
端函数
注意:在这种情况下,重复似乎是无害的,但我正在使用更大的代码块来满足这种需要。创建一个子例程,通过引用将数组传递给
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
Private子更新(ByRef数组作为变量,ByVal索引作为长索引,ByVal移动作为长索引)
对于i=索引-1到ubound(数组)
变量数组(i,1)=变量数组(i+move,1)
变量数组(i,2)=变量数组(i+move,2)
接下来我
端接头
私有子更新_索引(索引为整数,移动为整数)为布尔值
如果移动<0,则
雷迪姆保留变量数组(2,最后+移动)
更新变量数组、索引、移动
其他的
更新变量数组、索引、移动
雷迪姆保留变量数组(2,最后+移动)
如果结束
端函数
您可能可以提取另一个方法,但我不确定为什么要根据移动大小在前后执行ReDim
。私有函数更新\u索引(索引为整数,移动为整数)为布尔值
Private Function Update_Index(index As Integer, 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
If move > 0 Then ReDim Preserve Var_array(2, last + move)
End Function
最后变暗为整数
last=UBound(变量数组,2)
如果移动<0,则重拨保留变量数组(2,上次+移动)
对于i=索引-1到最后
变量数组(i,1)=变量数组(i+move,1)
变量数组(i,2)=变量数组(i+move,2)
接下来我
如果移动>0,则重拨保留变量数组(2,上次+移动)
端函数
这是在哪里定义的Var_array()
如果您希望自己的工作代码得到同行评审,您可能需要在上创建一个帐户-堆栈溢出通常用于断开的代码,CR会使您的代码更好:)如果您接受@retailcoder的建议,请在提问之前顺便过来。@ckuhn203我喜欢retailcoder的建议,我想我会非常感谢您的建议