【问题标题】:Copy from one ListObject to another VBA从一个 ListObject 复制到另一个 VBA
【发布时间】:2019-09-13 07:09:43
【问题描述】:

更多关于在这里编写漂亮的 VBA 代码的问题,因为它在技术上是有效的。我有一个简单的任务 - 我需要从一个 ListObject 复制数据(来自 4 列表的 2 列)并将其添加到另一个 2 列表的末尾(并让 Excel 表自动展开)。

我创建了 Range Trans_log,用于处理我需要复制的两列。我通过 newrow 定位新创建的 ListRow,以免意外地将数据粘贴到表格中间的某个位置。

但是有没有更简洁的方法来做到这一点,而不是使用 With.ActivateActiveCell

Sub Copy()

Dim newrow As ListRow
Set newrow = ActiveSheet.ListObjects("Log").ListRows.Add

ActiveSheet.Range("Trans_log").Copy

With newrow

.Range(1).Activate
ActiveCell.PasteSpecial xlPasteValues

End With

End Sub

【问题讨论】:

    标签: excel vba excel-2016


    【解决方案1】:

    您可以这样做 - 直接分配值而不是复制/粘贴

    Sub Copy()
    
        Dim newrow As ListRow
        With ActiveSheet
            Set newrow = .ListObjects("Log").ListRows.Add()
            newrow.Range.Value = .Range("Trans_log").Value 
        End With
    End Sub
    

    EDIT:用于复制多行

    Sub Copy()
        Dim rw As Range
        Dim newrow As ListRow
        Dim lst As ListObject, sht As Worksheet
    
        Set sht = Sheets(1)
        Set lst = sht.ListObjects("Log")
    
        'loop over rows in named range
        For Each rw In sht.Range("Trans_log").Rows
            'only copy rows with data
            If Application.CountA(rw) > 0 Then
                Set newrow = lst.ListRows.Add()
                newrow.Range.Value = rw.Value
            End If
        Next rw
    End Sub
    

    【讨论】:

    • 谢谢蒂姆。不幸的是,报告错误“应用程序定义或对象定义错误”。
    • 在哪一行?
    • 已测试 - 只要“Trans_log”与新表格行的形状相同,对我有用。
    • 您好!克服了最初的错误 - 我没有从同一张表启动,因此将“With ActiveSheet”调整为“With Sheets(2)”修复了它。尽管如此,您可能还暗示了一个问题。 “Trans_log” 是 2 列的范围(与表“Log”一样 - 因此数据本身适合),但是我试图同时添加多行,并希望表根据需要扩展。该代码不再报告任何错误,而是仅将“Trans_log”范围内的第一行添加到表“Log”中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2021-11-27
    • 2013-10-26
    • 1970-01-01
    • 2023-02-02
    • 2013-06-01
    • 2015-04-04
    相关资源
    最近更新 更多