我编译了一个宏,该宏使用输入框允许用户在同一工作簿中的三个不同工作表上的多个位置插入指定数量的行。然后,它使用基于示例第一行的自动填充来使用适当的数据填充这些新行。
它正确地完成了以上所有操作。但是,它还会将用户指定的行数插入“前页”中。运行宏时始终是活动表。它不是我指定的插入行的目的地之一。
从用户测试中,不需要的行不会插入到一致的位置,而是显示在工作表内的不同位置,看起来会随输入框中指定的数量而变化。它没有填充这些多余的行,因为它可以填充所需的行。
Sub AddPlots()
Dim j As Integer, r As Range,
'Set Number of Rows to be added
j = InputBox("How many open market units does the development have?")
' Add Rows On Master Appraisal
With Worksheets("Master Appraisal")
Set r = Range("FirstPlot")
Do
Range(r.Offset(1, 0), r.Offset(j - 1, 0)).EntireRow.Insert
Set r = Cells(r.Row + j + 1, 1)
If r.Offset(1, 0) = "" Then Exit Do
Loop
End With
'Add Rows On Cashflow
With Worksheets("Cashflow")
Set r = Range("FirstPlot2")
Do
Range(r.Offset(1, 0), r.Offset(j - 1, 0)).EntireRow.Insert
Set r = Cells(r.Row + j + 1, 1)
If r.Offset(1, 0) = "" Then Exit Do
Loop
End With
'Add Rows On Fees (NHBC section)
With Worksheets("Fees etc")
Set r = Range("FirstPlot3")
Do
Range(r.Offset(1, 0), r.Offset(j - 1, 0)).EntireRow.Insert
Set r = Cells(r.Row + j + 1, 1)
If r.Offset(1, 0) = "" Then Exit Do
Loop
End With
'Add Rows On Fees (Marketing section)
With Worksheets("Fees etc")
Set r = Range("FirstPlot4")
Do
Range(r.Offset(1, 0), r.Offset(j - 1, 0)).EntireRow.Insert
Set r = Cells(r.Row + j + 1, 1)
If r.Offset(1, 0) = "" Then Exit Do
Loop
End With
'Populate New Rows with Data
Worksheets("Cashflow").Range("Topline2").AutoFill
Destination:=Range("Topline2").Resize(j), Type:=xlFillDefault
Worksheets("Master Appraisal").Range("Topline").AutoFill
Destination:=Range("Topline").Resize(j), Type:=xlFillDefault
Worksheets("Fees etc").Range("Topline3").AutoFill
Destination:=Range("Topline3").Resize(j), Type:=xlFillDefault
Worksheets("Fees etc").Range("Topline4").AutoFill
Destination:=Range("Topline4").Resize(j), Type:=xlFillDefault
End Sub
答案 0 :(得分:1)
当您使用WITH....END WITH
代码块时,您想引用正确工作表的任何范围必须以句点(.
)开头,否则它将引用活动工作表。
因此Range(r.Offset(1, 0), r.Offset(j - 1, 0)).EntireRow.Insert
引用了有效工作表,而.Range(r.Offset(1, 0), r.Offset(j - 1, 0)).EntireRow.Insert
引用了WITH
语句中使用的工作表。
编辑:
同样Cells(r.Row + j + 1, 1)
应为.Cells(r.Row + j + 1, 1)
- 这些行会更新您在r
指定范围FirstPlot
中使用的工作表中的WITH
引用,以查看活动工作表而不是{{1}表格。