尝试创建一个文件,该文件可以每天将数据从一张纸传输到另一张纸。我可以进行数据传输,但它也会复制公式,所有单元格都出现 ref错误。如何只复制值而不复制公式。我是VBA的新手,我们将不胜感激。 谢谢
试图使用PasteSpecial
代码,但无法使用。
Sub Number1()
'
' Number1 Macro
'
Set wsCopy = Workbooks("Copy of PLA Failure Results (Macro) Good Test 2.xlsm").Worksheets("Raw Data")
Set wsDest = Workbooks("Copy of PLA Failure Results (Macro) Good Test 2.xlsm").Worksheets("Stored Data")
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row
wsCopy.Range("J2:R" & lCopyLastRow).Copy _
wsDest.Range("A2" & lDestLastRow)
End Sub
答案 0 :(得分:1)
一些清理代码的方法。一次声明您的工作簿,然后需要在以后的整个过程中进行引用。另外,我认为您的错误发生在您的Paste
行中。参见下面的代码(未经测试):
Sub Number1()
Dim wbGood As Workbook
Dim wsCopy As Worksheet, wsDest As Worksheet
Dim lCopyLastRow As Long, lDestLastRow As Long
Set wbGood = Workbooks("Copy of PLA Failure Results (Macro) Good Test 2.xlsm")
Set wsCopy = wbGood.Worksheets("Raw Data")
Set wsDest = wbGood.Worksheets("Stored Data")
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row
wsCopy.Range("J2:R" & lCopyLastRow).Copy
wsDest.Range("A" & lDestLastRow).PasteSpecial xlValues
Application.CutCopyMode = False
End Sub
答案 1 :(得分:0)
在这种情况下,您不需要.Copy
。您只需将目标范围的.Value
指定为等于复制范围的值,这比复制要快:
wsDest.Range("A" & lDestLastRow & ":I" & lDestLastRow + lCopyLastRow - 2).Value = _
wsCopy.Range("J2:R" & lCopyLastRow).Value
答案 2 :(得分:0)
更改:
wsCopy.Range("J2:R" & lCopyLastRow).Copy _
wsDest.Range("A2" & lDestLastRow)
使用方式:
wsCopy.Range("J2:R" & lCopyLastRow).Copy
wsDest.Range("A" & lDestLastRow).PasteSpecial xlPasteValues
您可以为此使用PasteSpecial
,同时也使用A2
和lastrow,这是错误的,应该是A
和Lastrow