Excel 2016 : Insert Row ABOVE find result in table

标签 excel vba insert row listobject

我是编程新手,并试图掌握这些概念。我要完成的工作:

  • 遍历第一个表以获取要搜索的字符串
  • 然后在第二个表中找到该字符串的第一个实例(如果存在)
  • 然后将一行(从第一个表)插入/复制到第二个表中找到实例的行上方(在第二个表中)......或者如果不存在实例:在第二个表的底部添加一个新行并在那里插入/复制行。

  • 我想我的第二部分工作正常

    我的不足之处在于找出正确执行此操作的 ListObject 方法。我尝试使用“activecell”方法,但这并没有给我在表格中的正确位置。我进行了广泛搜索,发现很少使用 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
    

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

    最佳答案

    您可以使用 EntireRow.Insert与您的FindRng范围。

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

    这将在您的范围正上方创建一个新行。这将向下移动找到的行,在原处留下一个空行。1

    只想为某些列插入新行?只需更换 EntireRowColumns() .下面的示例将为列 A:C 插入一行:
    findRng.Columns("A:C").Insert Shift:=xlDown
    

    1 感谢 clarifying那一点,吉普!

    关于Excel 2016 : Insert Row ABOVE find result in table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49344216/

    相关文章:

    mysql - 多对多 EclipseLink 插入

    javascript - 将 JQuery Handsontable 保存到服务器上的 Excel 文件

    excel - 用户窗体关闭时如何自动保存工作簿?来自红色 "X"

    Excel 加载项有时无法加载

    vba - 如何将Word文档中的所有表格导出到单独的Excel工作表

    vba - Excel VBA - 找到第一个空列

    excel - 来自工作表代码的工作表名称

    c++ - 我可以创建 map <string,map<string, int[2]>> 吗?

    php - 单击复选框将显示另一个输入字段,如何将其放入数据库中?

    由于长数据类型导致的 VBA-Excel 溢出错误