Excel 2016:在上面插入行查找表

时间:2018-03-18 03:29:25

标签: excel vba insert row listobject

我是编程和尝试掌握概念的新手。我想要完成的任务:

  1. 遍历第一个表以获取要搜索的字符串
  2. 然后在第二个表中找到该字符串的第一个实例(如果存在)
  3. 然后插入/复制一行(从第一个表)到第二个表ABOVE找到实例的行(在第二个表中)...或者如果不存在实例:在底部添加一个新行第二个表并在那里插入/复制行。
  4. 我认为我的第二部分正常工作

    我现在要做的就是找出正确执行此操作的ListObject方法。我尝试使用“活跃的细胞”#39;方法,但这并没有给我在表格中的正确位置。我已经进行了广泛的搜索,发现很少使用ListObject方法插入甚至粘贴到表中的动态位置。

    Dim lastRow, eachRow1, unitRow, qtyRow As Long
    Dim ws1, ws2, ws3 As Worksheet
    Dim tbl1, tbl2, tbl3 As ListObject
    Dim chkFrst As Boolean
    Dim qtyValue, yumItem As String
    Dim qty, stockQty, calcQty As Integer
    Dim lastDate, reDate As Date
    Dim findRng As Range
    Dim NewRow, addRow As ListRow
    Set ws1 = Sheets("UPDATE")
    Set ws2 = Sheets("DATA")
    Set ws3 = Sheets("LOG")
    Set tbl1 = ws1.ListObjects("Update_Table")
    Set tbl2 = ws2.ListObjects("Data_Table")
    Set tbl3 = ws3.ListObjects("Log_Table")
    
    For unitRow = 1 To tbl1.ListRows.Count
        yumItem = tbl1.ListColumns("ITEM").DataBodyRange.Cells(unitRow, 1).Value
        Set findRng = tbl3.Range.Find(What:=yumItem)
        If findRng Is Nothing Then
            Set NewRow = tbl3.ListRows.Add(AlwaysInsert:=True)
            NewRow.Range.RowHeight = 25
            NewRow.Range = tbl1.DataBodyRange.Cells.Range("A" & unitRow & ":O" & 
            unitRow).Value
        Else
            Application.Goto findRng, True
            ActiveCell.EntireRow.Insert Shift = xlDown
            Dim crntRow As Long
            crntRow = ActiveCell.Row
            Set NewRow = tbl3.InsertRowRange.Cells.Range(crntRow)
            NewRow.Range = tbl1.DataBodyRange.Cells.Range("A" & unitRow & ":O" & 
            unitRow).Value
       End If
    Next unitRow
    

    非常感谢任何和所有帮助!

2 个答案:

答案 0 :(得分:1)

您可以将EntireRow.InsertFindRng范围一起使用。

Set findRng = tbl3.Range.Find(What:=yumItem)
findRng.EntireRow.Insert Shift:=xlDown

这将在你的范围正上方创建一个新行。这将向下移动找到的行,在它的位置留下一个空行。 1

只想为某些列插入新行?只需将EntireRow替换为Columns()即可。以下示例将为列A:C插入一行:

findRng.Columns("A:C").Insert Shift:=xlDown

1 感谢clarifying这一点,Jeeped!

答案 1 :(得分:0)

感谢您的洞察力,我认为我必须使用ListRows.Add与ListObject格式重合。所以插入行不是问题,但我必须以某种方式格式化单元格,并且需要引用新行,所以我尝试了

findRng.Columns("A:O").Insert Shift:=xlDown
Set NewRow = findRng.Offset(-1, 0)
NewRow.Range.RowHeight = 25
NewRow.Range = tbl1.DataBodyRange.Cells.Range("A" & 
unitRow & ":O" & unitRow).Value

但现在我得到了错误的论点数量或无效的财产分配#39;如何设置新行?