Vba 寻找一行代码的解释

Vba 寻找一行代码的解释,vba,Vba,vba有点陌生,我有个朋友给了我这句话: ReDim保留输入(1到UBound(输入,1),1到3) 我不完全确定这一行在做什么,我知道ReDim可以更改数组中的值,而保留则保留除最后一行之外的所有数据。“To”语句在这个数组中到底做了什么?只是指定了重拨的次数吗?如果您查看文档,您将在括号中看到下标,如果您再往下看,您将看到下标的说明: 必需的。数组变量的维数;最多可以声明60个多维。subscripts参数使用以下语法: [lowerTo]上[,[lowerTo]上] 如果未在lower中显

vba有点陌生,我有个朋友给了我这句话:

ReDim保留输入(1到UBound(输入,1),1到3)


我不完全确定这一行在做什么,我知道ReDim可以更改数组中的值,而保留则保留除最后一行之外的所有数据。“To”语句在这个数组中到底做了什么?只是指定了重拨的次数吗?

如果您查看文档,您将在括号中看到下标,如果您再往下看,您将看到下标的说明:

必需的。数组变量的维数;最多可以声明60个多维。subscripts参数使用以下语法:

[lowerTo]上[,[lowerTo]上]

如果未在lower中显式声明,则数组的下限由Option Base语句控制。如果不存在Option Base语句,则下限为零

这意味着您可以将数组
InputID
的大小从之前的任何值调整到第一个维度(从1调整到之前的上限)和第二个维度(从1调整到3)

  • ReDim Preserve
    的行为与
    ReDim
    不同。它可以仅修改最后一个维度并保留(现有)值(如果有)。你使用它的方式有点奇怪。我的意思是,通常情况下,最好是
    ReDim
    一个数组到维度(尤其是最后一个维度),该数组能够覆盖要加载的元素的估计数量,再加上一些额外的元素。通常,应使用随添加的每个新元素而递增的变量,以便
    Redim保留该特定变量编号处的
  • 例如:

    Sub testRedimPreserve()
     Dim sh As Worksheet, arr, arrToProcess, i As Long, k As Long
     Set sh = ActiveSheet
     arr = sh.Range("A2:A20"): k = 1
     ReDim arrToProcess(1 To 2, 1 To UBound(arr))  'redim at a maximum which surely will not be exceeded
      For i = 1 To UBound(arr)
        If arr(i, 1) = "x" Then
            arrToProcess(1, k) = "Row " & i: arrToProcess(2, k) = "OK": k = k + 1
        End If
      Next i
      'Since some values in the range are not "x", the obtained array must use Redim Preserve:
      ReDim Preserve arrToProcess(1 To 2, 1 To k - 1) 'All the elements value up to k -1 are kept/preserved
      'Since only the last dimension can be preserved, the obtained array must be trasnposed.
      sh.Range("C2").Resize(k - 1, 2).Value = WorksheetFunction.Transpose(arrToProcess)
    End Sub
    
    1.a当然,如果你有一个更大的数组,你只需要它的前三列,你可以按照你朋友的建议继续

  • Redim arr(1到x)
    表示维度的第一个元素是1。在这种情况下,它将保持元素从1到x。如果不以这种方式指定,我的意思是
    ReDim arr(x)
    ,则第一个元素为零。这是默认的VBA。它在0基中工作。除了在模块顶部使用
    选项Base 1
    的情况

  • 我不确定你在@FaneDuru得到了什么,文档中提到了你所说的一切,问题是关于下标的。如果不知道第一个维度的边界,那么在错误调整答案上的arrayI注释的大小时,检查边界是很有用的。我想我是在评论OP问题。。。然后,我想也许可以给出一个更详细的答案,以便更好地理解
    ReDim Preserve
    的含义……你们两位再澄清一点,这一行将数组的物理大小从第一维的1更改为上限,从第二维的1更改为3?我猜是从1x1数组简化为((直到数据用完)x3)数组。@TrustedHippo:1。当你想在我的地址给我一个答案时,请评论我的答案。这样,就不用给我贴标签了。2.不,它不会改变第一维度中的任何东西。这是不可能的!这意味着第一个维度保持原样,第二个维度设置为3。如果数组的列数超过3列,这意味着在
    Redim Preserve
    之后,它将具有相同的行数,但只有3列。从1点到3点。如果不是
    1到3
    ,而是只有'3',剩下的列将是4。从0到3。@TrustedHippo:3。我们在这里,当有人花费一些时间来回答我们的问题,我们认为答案“精彩/有用等”,我们勾选左边的代码侧复选框,使其接受的答案。这样,其他搜索类似问题的人就会知道答案解决了您的问题。。。