我正在努力解决这个问题,我不明白为什么会导致问题。
ActiveSheet.Range("B1:E" & lastrow).Copy
ActiveSheet.Range("B1").Select
Selection.PasteSpecial xlPasteValues
ActiveSheet.Name = startday & "_" & startmonth & "_" & startyear
这会在第三行产生错误。
最初我只是简单地使用了“Range(”B1“)。pastespecial”等等,但这是粘贴到另一个打开的工作簿中,即使它不是活动工作表。
我尝试了大约70或80种不同的替代方法,我无法做到我认为相当简单的事情 - 即复制此范围并将它们作为值粘贴到同一位置的相同位置。
答案 0 :(得分:1)
ActiveSheet
可能会导致问题,have a read有关如何避免使用Select
和Active...
等ActiveSheet
元素的问题。
基本上,只需确定您对Worksheet
的每个引用的完全限定,同时指定工作表所在的Workbook
。
ThisWorkbook.Worksheets("SomeWorksheet").Range("B1:E" & lastrow).Copy
ThisWorkbook.Worksheets("AnotherWorksheet").Range("B1").PasteSpecial xlPasteValues
ThisWorkbook.Worksheets("YetAnotherWorksheet").Name = startday & "_" & startmonth & "_" & startyear
如果您的所有操作都与同一工作表相关,则可以使用With
令牌简化操作:
With ThisWorkbook.Worksheets("SomeWorksheet")
.Range("B1:E" & lastrow).Copy
.Range("B1").PasteSpecial xlPasteValues
.Name = startday & "_" & startmonth & "_" & startyear
End With
答案 1 :(得分:1)
如果您尝试将值粘贴到相同的表中,则只需执行以下操作:
With ActiveSheet.Range("B1:E" & lastrow)
.Value = .Value
End With
ActiveSheet.Name = startday & "_" & startmonth & "_" & startyear
最好,我会定义哪个表,这样就没有歧义:
With Workbooks("name of workbook").Worksheets("name of sheet").Range("B1:E" & lastRow)
.Value = .Value
End With
这将获取范围/数组的.Value
属性并将其写回工作表。无需复制或粘贴任何内容,结果将只保留值(即,所有公式引用都将被删除)。
答案 2 :(得分:0)
感谢大家的好评。
我确定了原因,但我并不完全理解问题的根本原因。
我正在采用将工作表从一个工作簿复制到新工作簿的方法,然后将此新工作表上的目标范围(包括公式)复制并粘贴为值。
当这个没有用时,我尝试了@David Zemens建议的方法,但这也没有用。
在我看来好像问题是新工作表中的公式引用了原始工作表中的单元格,并且出于某种原因(原因是我目前不了解的那个原因),这意味着当我尝试将它们转换为值和/或复制并粘贴为值时,VBA不喜欢它。
一旦我采用了让VBA创建新工作簿,然后将新书中原始工作表的内容粘贴为值的替代方法,问题就解决了。