.Range和.InsertShift复制新工作表上的表:覆盖数据

时间:2013-03-24 09:56:46

标签: excel-vba insert vba excel

我在Sheet.Range.Insert Shift:=xlDown上有一个基本问题。 我想在我的工作表上导入一个只有2列的数字表。 每次宏读取原始表中的2个值(在同一行上)时,它应将它们复制到工作表中的A列和B列中,并通过在后续行中写入另一对数字来继续该过程。 如果我写

Sheet.Range("A1:B1").Insert Shift:=xlDown
Sheet.Cells(1, 1) = "number 1 "
Sheet.Cells(1, 2) = "number 2"

我到底得到的是原始表中的最后一对值。 换句话说,宏会逐行覆盖而不是向下移动。 我应该修改什么?谢谢! Avitus

1 个答案:

答案 0 :(得分:3)

您的代码作为已发布的apears工作,但以相反的顺序放入新数据

经过测试

Sub demoAsIs()
    Dim Sheet As Worksheet
    Dim i As Long
    Set Sheet = ActiveSheet
    For i = 0 To 4
        Sheet.Range("A1:B1").Insert Shift:=xlShiftDown
        Sheet.Cells(1, 1) = "number " & 2 * i + 1
        Sheet.Cells(1, 2) = "number " & 2 * i + 2
    Next
End Sub

示例数据

在:
enter image description here

在:
enter image description here

要颠倒顺序,请尝试此

Sub demo()
    Dim Sheet As Worksheet
    Dim i As Long
    Dim rNewData As Range
    Set Sheet = ActiveSheet
    Set rNewData = Sheet.Range("A1:B1")
    For i = 0 To 4
        rNewData.Insert Shift:=xlShiftDown
        ' rNewData now refers to the one row down from where it was
        rNewData.Cells(0, 1) = "number " & 2 * i + 1
        rNewData.Cells(0, 2) = "number " & 2 * i + 2
    Next
End Sub

结果:
enter image description here


关于xlDown vs xlShiftDown

的说明

Excel VBa为参数提供了许多枚举集。每个枚举都有一个基础数值。 Insert方法,Shift参数使用XlInsertShiftDirection枚举:xlShiftDownxlShiftToRight
xlShiftDown = -4121
从另一个恰好具有相同基础数值的集合(例如xlDown)提供枚举将起作用,但并不严格正确。

关于Insert

的说明

Shift参数是可选的。如果省略,Excel将根据范围的形状决定转换的方式。