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的建议,我想我会非常感谢您的建议