首页 文章

插入新行并复制值的宏将覆盖下面的行

提问于
浏览
1

我写了一个宏,在列中搜索包含文本“AddCompany”的单元格,然后对于每个这样的单元格,将一个新行插入另一个工作表,然后复制并粘贴相邻单元格的值(包含名称)一个公司)进入那个新的行 .

在我的副本中,我使用单元格中的组成名称,“Test Company 1”通过“Test Company 4”来测试宏 . 宏正确插入4个新行,但只有最后一个公司,“测试公司4”被粘贴 . 它会被粘贴到错误的单元格中,位于新插入行的正下方 .

最后的结果是宏插入第9行到第12行,并将“Test Company 4”粘贴到已经包含名称(我不想更改)的第13行 .

我希望宏做的是为它找到的每个“AddCompany”插入一个“new”行(恰好是这个案例中的第9行以适应更大的表),然后将公司名称粘贴到相邻的单元格中,重复直到完成 . 新插入的第9行到第12行应该最终显示每个测试公司 .

任何帮助都感激不尽 .

谢谢,乔恩

Sub AddMoreCompanies()

Dim Table As Worksheet:     Set Table = Worksheets(1)
Dim Notes As Worksheet:     Set Notes = Worksheets(2)
Dim Accounts As Worksheet:  Set Accounts = Worksheets(3)
Dim SandI As Worksheet:     Set SandI = Worksheets(4)
Dim Report As Worksheet:    Set Report = Worksheets(5)
Dim Entry As Worksheet:     Set Entry = Worksheets(6)
Dim Issuer As Worksheet:    Set Issuer = Worksheets(7)

Dim Col As Range:           Set Col = Entry.Range("L5:L250")
Dim tCell As Range
Dim Target As Range:        Set Target = Table.Range("D9")

For Each tCell In Col
    If tCell.Value = "AddCompany" Then
            'Inserts new row in the Table
            Table.Rows("9:9").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Table.Rows("10:10").Copy
            Table.Rows("9:9").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Table.Range("E10:I10").AutoFill Destination:=Range("E9:I10"), Type:=xlFillDefault
            'copies text into target cell
            Else
        End If
    If tCell.Value = "AddCompany" Then
        Target.Value = tCell.Offset(0, 1).Value
        Else
    End If
    Next tCell
    'Target.Value = tCell.Offset(0, 1).Value  
End Sub

1 回答

  • 2

    您缺少的是 Target 变量(定义为 Set Target = Table.Range("D9") )将向下移动并变为 D10 ,然后 D11 (直到 D13 )每次 Insert 上面的新行 .

    要快速修复,请在复制值之前重新定义它 . 通过改变

    Target.Value = tCell.Offset(0,1).Value

    Table.Range("D9").Value = tCell.Offset(0, 1).Value
    

相关问题