3
this forum的代码是我用作起点的。我试图修改它以复制多个工作表并将它们全部粘贴为值,而不是仅限一个工作表。编辑VBA将多个工作表作为值粘贴到新工作簿中
我复制了多张使用worksheets(array(1,2,3)).copy
。我认为问题是With ActiveSheet.UsedRange
,因为它只是将第一个工作表替换为值并将其余工作表作为公式保留。
我需要更改哪些内容才能将所有工作表粘贴为值?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Worksheets(Array("Sheet 1","Sheet 2","Sheet 3").Copy
With ActiveSheet.UsedRange
.Value = .Value
End With
Set wbNew = ActiveWorkbook
wbNew.SaveAs "L:\Performance Data\UK Sales\Sales (Latest).xlsx"
wbNew.Close True
Application.DisplayAlerts = True
End Sub
谢谢你的回应! 我试图将这些值粘贴到**复制的**工作簿中,如您所说。原始工作簿应该保留所有公式。 但是,当我尝试这个代码时,它粘贴了原始工作表中的值,并在循环时耗尽内存。有没有办法限制它有多少个循环? – tenvfa
@tenvfa - 查看更新的代码。那样有用吗?如果内存不足,您可能需要检查UsedRange的大小......您预计它会有多大? – BruceWayne
您的编辑修复了将值复制到新工作簿的问题,所以谢谢。 它再次耗尽内存,调试器标记为 'wbNew.Worksheets(shts(i))。UsedRange.Value = wbNew.Worksheets(shts(i))。UsedRange.Value'作为错误。我是一名完全没有编码经验的VBA初学者,所以我不确定我是否理解你对尺寸的问题。 最大的工作表包含15列25,000行的单元格值。最小的纸张有15列2000行。 – tenvfa