我定义了以下宏,它将行插入到工作表中。在指定的起始地址插入行之后,各种范围将转换为表。我最初的想法是问题在于使用xlDown
- 因为这是插入行的代码中的位置。
目前我有7个这样的范围,但问题是前三个总是插入一个额外的行 - 这是以前没有问题的工作,所以它的行为不端对我来说是一个难题。
其余范围是正确的。 tableStartAdress
引用命名范围,其值对应于绿色标题下方的第一个单元格,即A4,A12等。此示例中的rowsToInsert
始终为38。
Sub InsertTableRows(tableStartAdress As String, rowsToInsert As Integer)
Dim i As Integer
Dim rowToCopy As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.DisplayAlerts = False
Range(tableStartAdress).Offset(1, 0).Rows.Copy
rowToCopy = Range(tableStartAdress).Offset(1, 0).row & ":" & _
Range(tableStartAdress).Offset(1, 0).row
Rows(rowToCopy).Select
Selection.Copy
Range(tableStartAdress).Offset(1, 0).Select
ActiveCell.Resize(rowsToInsert, 1).Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
以下图片描绘了我的意思。
之前:
。
填充数据后,前三个范围/表格有一个额外的行
,,
虽然其余部分是正确的
答案 0 :(得分:1)
我建议简化您的代码以便开始。 (可能会帮助您追踪事情是否出错。)因为您在使用它之前不需要选择范围....
rowToCopy = Range(tableStartAdress).Offset(1, 0).Row & _
":" & Range(tableStartAdress).Offset(1, 0).Row
Rows(rowToCopy).Select
Selection.Copy
Range(tableStartAdress).Offset(1, 0).Select
ActiveCell.Resize(rowsToInsert, 1).Select
Selection.Insert Shift:=xlDown
与......相同。
Range(tableStartAdress).Offset(1, 0).EntireRow.Copy
Range(tableStartAdress).Offset(1, 0).Resize(rowsToInsert, 1).Insert Shift:=xlDown
更容易看到。几个想法:首先,你确定tableStartAddress真的总是一个单元格(和正确的单元格)吗?你确定rowsToInsert总是38吗?除此之外,您当前编写的代码是复制整行并将其插入到理论上为38行1列的范围内。我建议重写这个,这样你首先插入你想要的许多行,然后用属于那里的数据填充38 x 1范围。