【问题标题】:Excel-VBA: Add Multiple Rows to Table with Data from different sheetExcel-VBA:使用来自不同工作表的数据向表中添加多行
【发布时间】:2022-06-24 22:26:39
【问题描述】:

我正在尝试将行添加到一个工作表上的表中,其中包含来自不同工作表的数据。下面的代码在一定程度上是有效的。

我可以让它一次添加一行数据,并确定将数据添加到表中的位置。但是,我希望它添加多行数据,同时仍然能够确定将其添加到表中的哪个位置。

我尝试了实现此过程的不同变体,但是,它们似乎都有问题。要么我可以插入多行,但无法确定它们在表中的位置,要么我无法一次添加多行。

Sub AddData()
 
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim NewRow As ListRow
        
        Set ws = ActiveWorkbook.Worksheets("DATA Member-19")
        Set tbl = ws.ListObjects("MemberInfo19")
        Set NewRow = tbl.ListRows.Add
            
            With NewRow
              .Range(1) = Sheets("Add Members").Range("B4")
            End With
End Sub

新行的范围将从 B4 开始,并会根据需要添加的数据量而变化。可以只有一行,也可以是多行需要传输过来的数据。

【问题讨论】:

    标签: excel vba listobject newrow


    【解决方案1】:

    我假设您实际上正在使用 2 个表 (?),并且想要将数据从 Table1 移动/复制到 Table2,因为它与搜索条件或会员编号输入相匹配? 试试下面的代码:

        Sub MoveMemberData()
     
        Dim SearchCell As Range
        Dim T1row As Long       'Row count Table1
        Dim T2row As Long       'Row count Table2
        Dim SearchRow As Long   'Searchrow count
        Dim DataRow As Long     'Use later to delete records on Table 1 if required
         
        Dim Tbl1 As ListObject, Tbl2 As ListObject
       
        Set Tbl1 = MySheet1.ListObjects("MyTable1")
        Set Tbl2 = MySheet2.ListObjects("MyTable2")
      
        T1row = Worksheets("MySheet1").UsedRange.Rows.Count
        T2row = Worksheets("MySheet2").UsedRange.Rows.Count
    
        If T2row = 0 Then
           If Application.WorksheetFunction.CountA(Worksheets("MySheet2").UsedRange) = 0 Then T2row = 0
        End If
      
        Set SearchCell = Worksheets("MySheet1").Range("B4:B" & T1row)
    
        On Error Resume Next
        Application.ScreenUpdating = False
        
        For SearchRow = 1 To SearchCell.Count   
            If CStr(SearchCell(SearchRow).Value) = "MemberInfo19" Then 
                T2row = T2row + 1
                Tbl2.ListRows.Add.Range.Value = Tbl1.ListRows(SearchRow).Range.Value
            End If
        Next
    ' Add this next loop to go through  Tbl1 and delete the rows you copied (if its required) 
     For DataRow = 1 To SearchCell.Count
            If CStr(SearchCell(DataRow).Value) = "MemberInfo19" Then
                Tbl1.ListRows(DataRow).Delete
                DataRow = DataRow - 1
            End If
        Next
        Application.ScreenUpdating = True
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多