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