【问题标题】:Macro to insert new row and copy a value overwrites the row below插入新行并复制值的宏会覆盖下面的行
【发布时间】:2017-12-23 19:25:27
【问题描述】:

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

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

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

我想要宏做的是为它找到的每个“AddCompany”插入一个“新”行(在这种情况下恰好是第 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

【问题讨论】:

  • 您是否尝试过插入复制的行而不是粘贴?如果需要,您可以多次插入活动行上方的行。
  • 嗨西里尔,目的不是复制一整行,而是插入一个新行,复制格式和一些公式(这部分工作正常。)我的问题来自于从其中一个复制一个值与包含“AddCompany”的单元格相邻的单元格并将该值粘贴到单元格 D9 中。 A.H.S 刚刚为我提供了一个适用于这个特定宏的答案,但我很想听听你的评论是什么意思。这可能是我对您的问题的误解,但我不太明白您的建议是什么。谢谢
  • 我在想你会复制包含“添加公司”文本的行,然后将其插入 3 次到活动行下方的行中。然后,您可以 .formula="" Test Company 1 - 4 进入这 4 行(总共 4 ... 原始 + 3)行中的每一行,完全替换“添加公司”单元格,因此如果循环不会被拾取将再次运行。幸运的是 ASH 能够解决这个问题,所以不管我的评论是否有意义,你至少明白了 ~_*

标签: vba excel


【解决方案1】:

您缺少的是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

【讨论】:

  • 感谢您的回答和解释,成功了。我现在可以简单地删除对Target 变量的任何引用,因为不再需要它。这是你第二次来救我,再次感谢。
  • @Jon0311 这是我的荣幸 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 2013-08-31
  • 2015-06-03
  • 2014-01-16
相关资源
最近更新 更多