繁体   English   中英

VBA - 将每个工作表保存为excel工作簿中的值

[英]VBA - saving every sheet as values in excel workbook

我正在尝试编写一个宏来遍历活动工作簿中的每个工作表,并将所有公式保存为值。 为此,对于每张工作表,首先我遍历每个数据透视表,然后选择表并复制并粘贴为值。 然后我尝试使用worksheet.activerange.value = .value方法来保存worksheet.activerange.value = .value的其余单元格。

我在行wks.UsedRange.Value = wks.UsedRange.Value上收到1004运行时错误。

我有两个问题:

1)如何修复运行时错误?

2)有没有办法让.value = .value与数据透视表一起使用? 在以前的宏中,这从未使用过枢轴,所以我必须使用如下的复制和粘贴。

非常感谢您的帮助!

Sub LockWorkbook()

Dim pvt As PivotTable
Dim wks As Worksheet
Dim i As Integer
Dim n As Integer

n = 1

For Each wks In ActiveWorkbook.Worksheets
    i = 1
    For Each pvt In wks.PivotTables
        wks.PivotTables(i).TableRange2.Select
        With Selection
            .Copy
            .PasteSpecial xlValues
            .PasteSpecial xlFormats
        End With
        i = i + 1
        Next pvt

    Set wks = ActiveWorkbook.Worksheets(n)
    wks.UsedRange.Value = wks.UsedRange.Value
    n = n + 1

    Next wks

End Sub

在King的观点上,您可以简单地将整个工作表复制并粘贴为值。

Sheets("Sheet1").cells.copy
Sheets("Sheet1").cells.PasteSpecial Paste:=xlPasteValues

如果你想把它放在一个简单的循环中来对所有页面进行,它可以看起来像:

Sub Test1()

    Dim WS_Count As Integer
    Dim I As Integer


    WS_Count = ActiveWorkbook.Worksheets.Count

    For I = 1 To WS_Count

        ActiveWorkbook.Worksheets(I).Cells.Copy
        ActiveWorkbook.Worksheets(I).Cells.PasteSpecial Paste:=xlPasteValues

    Next I

End Sub

如果有帮助,请告诉我!

最新编辑消除了运行时错误'1004'(不包括转换为值的数据透视表)

Option Explicit

Public Sub ConvertFormulasToValuesInUsedRangeExceptPivotTables()
    Dim ws As Worksheet, ur As Range, cel As Range
    Dim pvt As PivotTable, nonPivot As Range, isPvt As Boolean

    For Each ws In ThisWorkbook.Worksheets
        Set ur = ws.UsedRange

        For Each cel In ur

            For Each pvt In ws.PivotTables      'excludes pivot tables
                isPvt = Not Intersect(cel, pvt.TableRange2) Is Nothing
                If isPvt Then Exit For
            Next

            If Not isPvt Then
                If Len(cel.Formula) > 0 Then    'excludes empty cells
                    If nonPivot Is Nothing Then
                        Set nonPivot = cel
                    Else
                        Set nonPivot = Union(nonPivot, cel)
                    End If
                End If
            End If

        Next cel

        nonPivot.Value = nonPivot.Value
        Set nonPivot = Nothing

    Next ws

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM