首页 > 解决方案 > 在整个数组上执行 range(array(x)) 而不是逐个元素

问题描述

我正在编写一个宏,它将获取一个不断变化的数字列表(放置在一个数组中),从一个 powerpoint 复制等效的幻灯片,然后将选定的幻灯片粘贴到另一个 powerpoint 中(所以如果数字是 2、5 和 7 ,宏将复制/粘贴幻灯片 2、5 和 7)。我可以让它与单个数组元素一起工作,但无法弄清楚如何一次将所有数组元素传递到选择中。这些是相关的代码行:

Dim NumberList() As Variant
NumberList= Range("A11", Range("A10").End(xlDown))
OriginalPowerpoint.Slides.Range(Array(NumberList(1, 1), NumberList(3, 1))).Copy
      'this is the line I'm having trouble with
NewPowerpoint.Slides.Paste -1

上面的代码确实有效,但我想将整个 NumberList 传递到第三行的 Array() 中,而不是 NumberList(1,1) 和 NumberList(3,1) 的当前样本。仅输入“NumberList”或“NumberList()”是行不通的,出于效率原因,我真的很想避免将其设为循环。任何建议将不胜感激。

标签: arraysexcelvba

解决方案


PowerPoint 幻灯片阵列壮举“write1D”

如果您发布的示例有效,这应该可以解决问题(未经测试)。

Option Explicit

Sub PowerP()

    Dim NumberList As Variant

    NumberList = Range("A11", Range("A11").End(xlDown))
    NumberList = write1D(NumberList)
    OriginalPowerpoint.Slides(NumberList).Copy

End Sub

Function write1D(ColumnArray As Variant, _
  Optional ColumnIndex As Long = 1) As Variant
    Dim Source As Variant, i As Long
    ReDim Source(UBound(ColumnArray) - LBound(ColumnArray))
    For i = LBound(ColumnArray) To UBound(ColumnArray)
        Source(i - LBound(ColumnArray)) _
          = ColumnArray(i, LBound(ColumnArray, 2) + ColumnIndex - 1)
    Next i
    write1D = Source
End Function

推荐阅读