我正在尝试仅将表中的值复制到不同的工作表,但下面的代码只复制公式,从而丢失引用。我尝试了不同的解决方案,例如将.Value添加到.DataBodyRange.Copy单元格(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 `
答案 0 :(得分:0)
This question可能会对您有所帮助。使用pastespecial粘贴值时,请尝试更改格式(值或公式)。
答案 1 :(得分:0)
您已经在使用循环来完成检查。您应该使用循环来完成工作,并且不必担心使用剪贴板进行复制和粘贴。我可以理解使用复制和粘贴,尤其是如果你不了解循环,但你明确这样做。
您可以执行另一个循环,您可以在其中一次设置一个单元格的值。
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中编写三或四行循环比录制宏更快,然后编辑它,清理它,修改它,并调试它。对于记录宏观而言,这似乎不那么重要了。但根据我的经验,代码更快,更准确。你确切地知道发生了什么,而不是你可能不想质疑的一些参数,也不知道他们做了什么。