我编译了一个宏,它使用输入框允许用户在同一个工作簿中的三个不同工作表上的多个位置插入指定数量的行。然后,它使用基于示例第一行的自动填充使用适当的数据填充这些新行。
它正确地完成了上述所有操作。但是,它还将用户指定的行数插入到“Front”中,在运行宏时,它始终是活动表。它不是我指定的插入行的目的地之一。
在用户测试中,不需要的行不会插入到一致的位置,而是出现在工作表中的不同位置,似乎与输入框中指定的数字不同。它不像填充所需的行那样填充这些多余的行。
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发布于 2016-02-04 10:50:51
在使用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) --这些行将从命名范围FirstPlot中使用的工作表更新r引用,以查看活动工作表而不是WITH表。
https://stackoverflow.com/questions/35198771
复制相似问题