Excel 更改为在板材之间移动时,在Marco下方移动不工作

Excel 更改为在板材之间移动时,在Marco下方移动不工作,excel,vba,Excel,Vba,我正在尝试更改我的移动到宏,以移动不同工作表上列下的列 当我在同一张纸上的其他列下移动列时,它工作得很好 我无法获得wsS.Range(单元格(2,j),单元格(lRow,j))的正确语法。复制_ 目的地:=wsT.范围(单元格(LR,k),单元格(LR,k)).偏移量(1,0) 当我运行宏时,不会发生任何事情,不会抛出任何错误,也不会移动任何内容 谢谢 Sub MoveUnder() Dim wsS As Excel.Worksheet Dim wsT As Worksheet Dim ar

我正在尝试更改我的
移动到
宏,以移动不同工作表上列下的列

当我在同一张纸上的其他列下移动列时,它工作得很好

我无法获得
wsS.Range(单元格(2,j),单元格(lRow,j))的正确语法。复制_
目的地:=wsT.范围(单元格(LR,k),单元格(LR,k)).偏移量(1,0)

当我运行宏时,不会发生任何事情,不会抛出任何错误,也不会移动任何内容

谢谢

Sub MoveUnder()
Dim wsS As Excel.Worksheet
Dim wsT As Worksheet
Dim ar As Variant
Dim er As Variant
Dim i As Variant
Dim h As Variant
Dim j As Long
Dim k As Long
Dim lRow As Long
Dim LR As Long


Set wsS = ActiveWorkbook.Sheets(1)
Set wsT = ActiveWorkbook.Sheets(2)

    ar = Array("user id", "user name")    ' Find column to copy
    er = Array("user id", "user name")    ' Find column to paste beneith

lRow = wsS.Range("A" & Rows.count).End(xlUp).Row
LR = wsT.Range("A" & Rows.count).End(xlUp).Row

On Error Resume Next
For i = LBound(ar) To UBound(ar)
    j = wsS.Rows(1).Find(ar(i), Rows(1).Cells(Rows(1).Cells.count), , xlWhole,   xlByRows).Column
    k = wsT.Rows(1).Find(er(i), Rows(1).Cells(Rows(1).Cells.count), , xlWhole, xlByRows).Column

      wsS.Range(Cells(2, j), Cells(lRow, j)).Copy _
   Destination:=wsT.Range(Cells(LR, k), Cells(LR, k)).Offset(1, 0)
Next i
On Error GoTo 0

End Sub

我稍微修改了您的代码,使其更可靠:

Sub MoveUnder()
    Dim wsS As Worksheet, wsT As Worksheet
    Dim ar, er, i, h, j, k
    Dim lRow As Long, LR As Long
    Dim rng1 As Range, rng2 As Range

    Set wsS = ActiveWorkbook.Sheets(1)
    Set wsT = ActiveWorkbook.Sheets(2)

    ar = Array("user id", "user name")    ' Find column to copy
    er = Array("user id", "user name")    ' Find column to paste beneith

    lRow = wsS.Range("A" & wsS.Rows.Count).End(xlUp).Row
    LR = wsT.Range("A" & wsT.Rows.Count).End(xlUp).Row

    For i = LBound(ar) To UBound(ar)
        Set rng1 = wsS.Range("1:1").Find(ar(i), wsS.Cells(1, wsS.Columns.Count), , xlWhole, xlByRows)
        Set rng2 = wsT.Range("1:1").Find(er(i), wsT.Cells(1, wsT.Columns.Count), , xlWhole, xlByRows)
        If Not rng1 Is Nothing And Not rng2 Is Nothing Then
            j = rng1.Column
            k = rng2.Column

            wsS.Range(wsS.Cells(2, j), wsS.Cells(lRow, j)).Copy _
                Destination:=wsT.Cells(LR + 1, k)
        End If
    Next i
End Sub
您应该完全限定
单元格
对象,如下所示:
wsT.Cells(LR,k)
等等


另请检查此链接以获取解释

注释下一步错误恢复时的
,查看抛出的错误。你好,波特兰跑步者,我得到对象工作表的
方法范围失败
wsS.Range(单元格(2,j),单元格(lRow,j))。复制目标:=wsT.Range(单元格(LR,k),单元格(LR,k))。偏移量(1,0)
被突出显示,我认为这是问题所在,但我不知道哪里出了问题,谢谢,这非常有效。simoco我注意到您有
Dim ar,er,I,h,j,k
这些不需要像
Dim ar As Variant
这样的特定Dim?默认情况下,所有变量都有类型
Variant
,直到您指定任何其他变量,所以您可以始终在声明中将其作为Variant
部分