插入后Excel向下移动数据

时间:2016-05-02 21:28:36

标签: excel vba excel-vba

希望有人可以帮助我:(

在一系列工作簿中(从来不是一个好主意:)),用户运行一个宏来复制Workbook1中的数据并使用Insert Shift:=xlDown中的Workbook2插入它。

问题在于:目的地下方有较高的行和分组的文本框,而不是将它们向下移动,宏会使行大小变大,文本框也不会移动。

我已将文本框组设置为Move and size with cells并尝试CopyOrigin:=xlFormatFromLeftOrAbove,但似乎没有任何区别。

有人可以帮忙吗?

由于

修改

以下是完整的代码:(注释掉原始想法,在下面添加了建议)

Sub MakeQuote2()
Application.ScreenUpdating = False
Dim sourceRange As Range, loopRange As Range
Dim targetRange As Range
Dim FRow As Long
Dim m As Long
Dim p As Long
m = Sheets("Workbook1").Rows.Count
FRow = Sheets("Workbook1").Range("A" & m).End(xlUp).Row

Set sourceRange = ActiveSheet.Range("A9:E" & FRow)
Set targetRange = Workbooks.Open("C:\Users\j\Documents\Trial1.xltm").Sheets("Workbook2").Range("A4")

sourceRange.Copy
Sheets("Workbook2").Rows("4:4").EntireRow.Insert 'Select
'Selection.Insert 'Shift:=xlDown
p = FRow + 5
Sheets("Workbook2").Rows("4:" & p).Copy
Sheets("Workbook2").Rows("4:4").PasteSpecial xlPasteValues
Sheets("Workbook2").Range("A2").Select
Application.CutCopyMode = False
Workbooks("Copy.xlsm").Close SaveChanges:=False
Application.ScreenUpdating = True
End Sub

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您希望下面的文本框移动并使用上面的单元格调整大小,那么使用

就不够了
.Insert Shift:=xlDown

相反,您需要使用

.EntireRow.Insert

enter image description here

答案 1 :(得分:1)

如果您复制整行,粘贴会将所有内容都移除。如果您的复制源只有几列,则数据会向下移动,但行格式或对象不会随之移位。这在Excel中是正确的,不仅在VBA中。

此代码适用于我(我更改了一些引用以在我的环境中测试它):

Set sourceRange = Sheets("Sheet2").Range("A9:E" & FRow).EntireRow '<-- Added EntireRow here.
Set targetRange = Sheets("Sheet1").Range("A4") '<-- This is never used. 
sourceRange.Copy
Sheets("Sheet1").Rows("4:4").EntireRow.Insert 
  • 我做的唯一补充是将EntireRow添加到要复制的源范围。如果您只需要A:E列,我建议您根据FRow - 9插入空白行,然后在添加的行中复制并粘贴A:E
  • 请注意,您在原始代码中混合了引用Sheets("Workbook1")ActiveSheet,而您从不使用targetRange

加成

如第一个注释中所述,要在粘贴相关列之前添加空行,可以使用类似以下代码:

Sheets("Sheet1").Rows("4:" & FRow - 9 + 4).EntireRow.Insert 
Set sourceRange = Sheets("Sheet2").Range("A9:E" & FRow)
Set targetRange = Sheets("Sheet1").Range("A4") 
sourceRange.Copy
targetRange.PasteSpecial