2016-03-02 61 views
1

以下VBA代碼旨在將多個工作表中的公式轉換爲值,然後將工作簿的副本保存到指定目錄中。將多個工作表中的公式轉換爲值

我試圖只複製粘貼值,但工作簿仍然保存在這些表中的公式。我不知道我做錯了什麼,這段代碼似乎沒有工作

Sub CREATE4SHEETS() 
Sheets(Array("sheet1", "sheet3", "sheet6", "sheet7", "sheet8", "sheet10")).Select 
Sheets("sheet10").Activate 
Sheets(Array("sheet1", "sheet3", "sheet6", "sheet7", "sheet8", "sheet10")).Copy 

Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues 
ChDir "\\mac\desktop\" ' Name folder  
ActiveWorkbook.SaveAs Filename:= _ 
    "\\Mac\Desktp\newworkbook.xlsx" _ 
    , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False ' need to change the name of the folder 
ActiveWorkbook.Save 
End Sub 

似乎

Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues 

未正常工作應該。有誰知道爲什麼?謝謝!

+0

您是否正在嘗試複製到另一個文件? – Susilo

+0

是,從一個工作簿中選擇工作表到另一個工作簿中的另一個 – Sailormoon

回答

1

以下修改後的代碼會將指定工作表中的任何公式轉換爲值,然後使用指定的文件名保存工作簿。

Sub CREATE4SHEETS() 
Dim WS as Worksheet 
Application.DisplayAlerts = False 
'For each WS in Sheets(Array("sheet1", "sheet3", "sheet6", "sheet7", "sheet8", "sheet10")) 
' WS.UsedRange.Value2 = WS.UsedRange.Value2 
'Next WS 

For each WS in Worksheets 
    If (UBound(Filter(Array("sheet1", "sheet3", "sheet6", "sheet7", "sheet8", "sheet10"), WS.Name)) > -1) Then 
     'Keep this worksheet 
     WS.UsedRange.Value2 = WS.UsedRange.Value2 
    Else 
     WS.Delete 
    End If 
Next WS 

Set WS = Nothing 

ActiveWorkbook.SaveAs Filename:= _ 
    "\\Mac\Desktp\newworkbook.xlsx" _ 
    , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False ' need to change the name of the folder 
Application.DisplayAlerts = True 
End Sub 
+0

此代碼可以節省額外的工作表,這在原始工作簿中也不需要。 – Sailormoon

+0

@Sailormoon編輯提供一個將刪除所有其他工作表的答案。 –

+0

嗨尼克非常感謝,你是否也知道如何避免這個消息說已經有一個副本?我想默認它被保存爲覆蓋。只要我敲下最後一部分,我會盡快接受答案。謝謝! – Sailormoon