复制一个包含行的数组作为变量

Copy an array with row as a variable

我是 Excel VBA 编程新手,我使用的是 2010 版。

我正在尝试复制数组中所列列中单元格的内容,以便将它们粘贴到另一个工作表上。

列将保持不变,但我希望行位于活动单元格所在的位置。该代码链接到一个按钮。

当我使用单元格整数使数组变暗时,这就像一个魅力。我希望有一种方法可以使数组动态化,行号基于活动单元格。

Dim x As Integer
Dim myarray As Variant
x = ActiveCell.Row
myarray = Array("Ax", "Fx", "Ix", "Jx", "Kx", "Rx")

With ThisWorkbook.Worksheets("HANDOVER")
  Cells(x, myarrray).Select
  Selection.Copy
End With

您不能将数组作为列参数传递给 Cells。您可以对这样的地址字符串执行简单的 Replace 操作:

Dim x                     As Long
Dim myarray               As Variant
x = ActiveCell.Row
myarray = "Ax,Fx,Ix,Jx,Kx,Rx"

ThisWorkbook.Worksheets("HANDOVER").Range(Replace(myarray, "x", x)).Copy

这应该对您有所帮助,我有一个自定义函数(见下文)来查看 headers 并获取相应的列号以供以后重复使用。

但是,我确实必须修改您的代码(我去掉了无用的 .Select 和 ressource-greedy)才能使用我的功能,请参见下面的组合:

Sub Test_Mabes()
Dim x As Integer, _
    myArray As Variant, _
    Ws As Worksheet, _
    ColNb() As Variant

Set Ws = ThisWorkbook.Worksheets("HANDOVER")
x = Ws.ActiveCell.Row

myArray = Array("Ax", "Fx", "Ix", "Jx", "Kx", "Rx")
ReDim ColNb(UBound(myArray))

For i = LBound(myArray) To UBound(myArray)
    ColNb(i) = GetColumnNb(Ws, myArray(i))
Next i

Ws.Cells(x, ColNb).Copy

End Sub

这里是函数:

Public Function GetColumnNb(ByVal SheetName As Worksheet, ByVal HeaderName As String) As Integer
Dim ShA As Worksheet
Set ShA = SheetName

For j = 1 To ShA.Cells(1, Columns.Count).End(xlToLeft).Column
    If LCase(ShA.Cells(1, j)) <> LCase(HeaderName) Then
    Else
        GetColumnNb = j
    End If
Next j

End Function