【问题标题】:Copy and Paste from Tables with VBA使用 VBA 从表中复制和粘贴
【发布时间】:2018-03-23 11:28:42
【问题描述】:

MS Excel 2016 VBA:

以下代码运行良好,除非表格被过滤。关于如何在不撤消过滤的情况下解决这个问题的任何想法?

每天我都需要复制新列并将其粘贴到旧列中,以便我们跟踪每天的进度。

我有额外的代码要取消过滤,但我不喜欢这个主意。

建议?

Sub Table_Move()

    Dim tbl As ListObject
    Dim N As String
    Dim O As String

    Call Clear

    N = "New"
    O = "Old"

    Set tbl = ActiveSheet.ListObjects("Table1")

    tbl.ListColumns(N).DataBodyRange.Copy
    tbl.ListColumns(O).DataBodyRange.PasteSpecial xlPasteValues


End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:
    Sub Table_Move()
    
        Dim N As String
        Dim O As String
    
        Call Clear
    
        N = "New"
        O = "Old"
    
        Range("Table1[" & N & "]").Copy
        Range("Table1[" & O & "]").PasteSpecial xlPasteValues
    
    
    End Sub
    

    更新

    仅处理可见单元格

    Sub Table_Move()
    
        Dim N As String
        Dim O As String
        Dim Rng As Range
        Dim rw As Range
    
        Call Clear
    
        N = "New"
        O = "Old"
    
        For Each rw In Range("Table1[" & N & "]").Cells
    
            If rw.EntireRow.Hidden = False Then
                If Rng Is Nothing Then Set Rng = rw
                Set Rng = Union(rw, Rng)
            End If
    
        Next rw
    
        Rng.Copy
    
        Range("Table1[" & O & "]").PasteSpecial xlPasteValues    
    
    End Sub
    

    还有

    Sub Table_Move()
    
        Dim N As String
        Dim O As String
    
        Call Clear
    
        N = "New"
        O = "Old"
    
        Range("Table1[" & N & "]").SpecialCells (xlCellTypeVisible).Copy
        Range("Table1[" & O & "]").PasteSpecial xlPasteValues
    
    
    End Sub
    

    【讨论】:

    • 谢谢,但这不适用于过滤后的行
    • 它复制的范围完全包含过滤的行。如果您只需要复制可见行,现在我已经更新了上面的答案,否则请谈谈您在使用过滤行时遇到的问题。
    【解决方案2】:

    这段代码将复制并粘贴数据范围内的每一行,即使过滤器已打开

    Sub Move()
    Dim rowcount As Integer, currentRow As Integer
    Dim sourceCol  As Integer, TargetCol As Integer
    
    sourceCol = 14 ' Its N Column
    TargetCol = 15 ' Its O Column
    rowcount = Cells(Rows.Count, sourceCol).End(xlUp).Row 'counts the rows with data
    For currentRow = 1 To rowcount
        Range("O" & currentRow).Value = Range("N" & currentRow).Value 'Copy from N to O
    Next
    
    End Sub
    

    【讨论】:

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