【问题标题】:VBA Excel Copy Table Values only to another sheetVBA Excel 仅将表值复制到另一个工作表
【发布时间】:2014-11-17 08:25:25
【问题描述】:

我试图只将表中的值复制到不同的工作表中,但是下面的代码只是复制公式,因此会丢失引用。我尝试了不同的解决方案,例如将 .Value 添加到 .DataBodyRange.Copy Cells(i,1) 但没有奏效。

感谢您的帮助

Sub loadData()
Application.AutoCorrect.AutoFillFormulasInLists = False
Dim wsh As Worksheet, i&
Application.ScreenUpdating = 0
With ActiveSheet.ListObjects(1)
    If ActiveSheet.FilterMode Then .Range.AutoFilter
    .DataBodyRange.Delete
    i = 4
    For Each wsh In ThisWorkbook.Worksheets
        If wsh.Name <> "Template"  Then
            With wsh.ListObjects(4)
                .DataBodyRange.Copy Cells(i, 1)
                i = i + .ListRows.Count
            End With
        End If
    Next wsh
    .Range.AutoFilter Field:=5
End With
Application.ScreenUpdating = 1
End Sub    `

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    This question 可能会对您有所帮助。尝试使用 pastespecial 粘贴值时更改格式(值或公式)。

    【讨论】:

      【解决方案2】:

      您已经在使用循环来完成检查。您应该使用循环来完成工作,而不必担心使用剪贴板进行复制和粘贴。我可以理解使用复制和粘贴,特别是如果您不理解循环,但您显然会。

      您可以执行另一个循环,一次设置一个单元格的值。

      LastCol = Sheets("Sheet1").Cells(1, Columns.count).End(xlToLeft).Column   'Get last column of row with data
      
      For col = 1 To LastCol
          Sheets("Sheet2").Cells(i, col).Value = Sheets("Sheet1").Cells(i, col).Value
      Next col
      

      这不是一个完整的解决方案,但是如果您将其插入到您尝试复制和粘贴的代码中,您应该对如何完成这个有一个很好的了解。同样,我会避免使用复制和粘贴宏,因为在 VBA 中编写一个三四行循环比录制一个宏,然后对其进行编辑、清理、修改和调试更快。 “录制宏”确实看起来更少工作,但根据我的经验,代码更快更准确。您确切地知道发生了什么,而不是一些您可能不想质疑并且不知道它们做什么的参数。

      【讨论】:

        猜你喜欢
        • 2016-11-19
        • 2019-05-02
        • 2013-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多