首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在要求之外插入行

在要求之外插入行
EN

Stack Overflow用户
提问于 2016-02-04 10:39:09
回答 1查看 51关注 0票数 0

我编译了一个宏,它使用输入框允许用户在同一个工作簿中的三个不同工作表上的多个位置插入指定数量的行。然后,它使用基于示例第一行的自动填充使用适当的数据填充这些新行。

它正确地完成了上述所有操作。但是,它还将用户指定的行数插入到“Front”中,在运行宏时,它始终是活动表。它不是我指定的插入行的目的地之一。

在用户测试中,不需要的行不会插入到一致的位置,而是出现在工作表中的不同位置,似乎与输入框中指定的数字不同。它不像填充所需的行那样填充这些多余的行。

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35198771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档