我在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
答案 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
示例数据
在:
在:
要颠倒顺序,请尝试此
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
结果:
关于xlDown
vs xlShiftDown
Excel VBa为参数提供了许多枚举集。每个枚举都有一个基础数值。 Insert
方法,Shift
参数使用XlInsertShiftDirection
枚举:xlShiftDown
,xlShiftToRight
。
xlShiftDown
= -4121
从另一个恰好具有相同基础数值的集合(例如xlDown
)提供枚举将起作用,但并不严格正确。
关于Insert
Shift
参数是可选的。如果省略,Excel将根据范围的形状决定转换的方式。