excel - 编辑 VBA 将多个工作表作为值粘贴到新工作簿中

标签 excel vba

代码来自this forum是我用作起点的。我正在尝试修改它以复制多张纸并将它们全部粘贴为值,而不是仅粘贴一张纸。

我使用 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

最佳答案

您需要循环浏览工作表:

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    ws.UsedRange.Value = ws.UsedRange.Value
Next ws

因此,使用您的代码,您可以这样做:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wbOld As Workbook, wbNew As Workbook
Dim ws As Worksheet, delWS As Worksheet
Dim i       As Long, lastRow As Long, lastCol As Long
Dim shts()  As Variant
Dim rng As Range

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Set wbOld = ActiveWorkbook

shts() = Array("Sheet 1", "Sheet 2", "Sheet 3")
Set wbNew = Workbooks.Add
Set delWS = ActiveSheet
wbOld.Worksheets(Array("Sheet 1", "Sheet 2", "Sheet 3")).Copy wbNew.Worksheets(1)
delWS.Delete

For i = LBound(shts) To UBound(shts)
    With wbNew.Worksheets(shts(i))
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        Set rng = .Range(.Cells(1, 1), .Cells(lastRow, lastCol))
        rng.Value = rng.Value
    End With
Next i

wbNew.SaveAs "L:\Performance Data\UK Sales\Sales (Latest).xlsx"
wbNew.Close True

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

注意:我不确定您要将值粘贴到哪个工作簿中。如上所述,它是在复制的工作簿中执行此操作,而不是在原始工作簿中。

关于excel - 编辑 VBA 将多个工作表作为值粘贴到新工作簿中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43763372/

相关文章:

excel - 如何转置Excel中其他选项卡中的数据

vba - 检查工作表名称以避免重复

vba - 如何隐藏 Excel 中的一系列行直到值发生变化

excel - 自动筛选日期错误 : "Method of Range Class Failed"

sql-server - 如何在 Report Builder 3.0 中将 Excel 公式插入单元格?

excel - 在 Excel VBA 中使用字典对象

c# - 将 csv 格式的 .txt 文件作为工作表添加到 C# 中的现有工作簿

excel - 在 Excel VBA 中执行 if-then-next

vba - 在每个当前区域后插入 2 个空白行

VBA 在消息框中显示集合 - 错误