Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA-将每张工作表保存为excel工作簿中的值_Vba_Excel - Fatal编程技术网

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

VBA-将每张工作表保存为excel工作簿中的值,vba,excel,Vba,Excel,我正试图编写一个宏来循环活动工作簿中的每个工作表,并将所有公式保存为值。为此,对于每个工作表,我首先遍历每个透视表,然后选择该表并将其复制粘贴为值。然后我尝试使用worksheet.activerange.value=.value方法保存工作表中的其余单元格 我在wks.UsedRange.Value=wks.UsedRange.Value行上收到一个1004运行时错误 我有两个问题: 1) 如何修复运行时错误 2) 是否有一种获取.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

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


在King's point上,您可以简单地复制并粘贴整个工作表作为值

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

如果有帮助,请告诉我

它不应该被使用吗。对不起,我可能错了。此外,透视表不能包含公式。它们只能包含值,因此您不需要这样的宏。Wouldnt cells.copy cells.paste特殊xlValues适用于包括数据透视在内的整个工作表。我仍然在“ws.usedrange.value=ws.usedrange.value”行中遇到“运行时错误'1004':应用程序定义或对象定义的错误”。有什么想法吗?好的,这是一个简单的工作簿(我打开了一个新文件,并浏览了一些sum())。但它无法处理更复杂的文件(包含数据透视、条件格式、合并的单元格和指向其他文件的链接)。你知道这是什么原因吗?你最后的评论很好-我只是用一个简单的文件(有3个pivot表)进行了测试。我认为数据透视并没有造成问题,但我将添加更多公式、验证规则、条件格式、合并单元格以及指向其他文件的链接。你档案里还有别的东西吗?另外-错误号和描述是什么?始终为“运行时错误'1004':应用程序定义的或对象定义的错误”。最新编辑(非常晚)消除了运行时错误'1004'(不包括数据透视表转换为值)
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