簡體   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