vba - DRY方式切换执行顺序

标签 vba excel

在下面的函数中(我还没有测试过),我需要移动数组中的值,然后相应地调整数组的大小,问题是,取决于我们是在索引中向上还是向下移动值需要先调整数组大小或移动值。正如你所看到的,我有一个 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/

相关文章:

vba - 从网站上的列表中获取数据以 Excel VBA

excel - 在 VBA 中循环使用具有相似名称结构的工作表

java - XSSF (POI) - 更改数据透视表上的字体

excel - 一次将多个单元格引用从相对更改为绝对 ($)

mysql - 通过 VBA 代码在 MS Access 中不区分大小写的过滤器

mysql - VBA SQL 替换为语法错误

excel - 以 >= 和 <= 作为条件的索引匹配未返回正确的值

c# - Excel 中的彩色文本部分 >255 个字符

excel - VBA - “Can' 找不到项目或库”,用于正确定位的自定义 .xla 文件

vba - 用于删除电话号码前导 1(如果存在)的 Excel 公式