我有一個 Excel 檔案,用戶可以在其中單擊一個按鈕來保存沒有公式且只有值的版本。
到目前為止,我使用這個 VBA:
Sub Create_version_with_values_only()
Dim b As Worksheet
For Each b In Worksheets
b.Cells.Copy
b.Cells.Cells.PasteSpecial Paste:=xlPasteValues
Next b
Application.CutCopyMode = False
ActiveWorkbook.SaveCopyAs "G:\Folder\test.xlsm"
ThisWorkbook.Close SaveChanges:=False
End Sub
這個 VBA 本身作業正常。
但是,問題是我必須在創建檔案的值版本后關閉檔案,因為原始版本將不再可用。
因此,我想知道是否有另一種方法來創建檔案的值版本,以便之后可以回傳到原始檔案。
像這樣的東西:
步驟 1) 將所有公式更改為值。
步驟 2)使用檔案夾中的值保存版本。
步驟 3)在不關閉原始作業表的情況下撤消原始作業表中的值替換。
你知道如何解決它嗎?
uj5u.com熱心網友回復:
可能有一種更簡單的方法可以到達那里,但這里是您創建新作業簿、傳輸值并保存的方法。
Public Sub SaveValues()
Dim newWb As Workbook
Set newWb = Workbooks.Add 'create a new workbook for the values
Dim ws As Worksheet, newWs As Worksheet
For Each ws In ThisWorkbook.Worksheets
With newWb 'create worksheets and name them in new workbook
If ws.Index = 1 Then
Set newWs = .Worksheets(1)
Else
Set newWs = .Worksheets.Add(After:=.Worksheets(.Worksheets.Count))
End If
newWs.Name = ws.Name
End With
With ws.UsedRange 'move values to new worksheet
newWs.Range("A1").Resize(.Rows.Count, .Columns.Count).Value = .Value
End With
Next
'save new workbook. If the current workbook is a .xlsb, change the .xlsm in the code below
newWb.SaveAs Replace(ThisWorkbook.FullName, ".xlsm", "_hardcoded.xlsm"), xlOpenXMLWorkbookMacroEnabled
newWb.Close
End Sub
更新了以下替代方案:
選擇
另一種方法是使用ThisWorkbook.Worksheets.Copy一次性復制所有作業表。不幸的是,要使用此代碼,我們必須使用ActiveWorkbook對新作業簿的參考。(我希望它可能回傳一個Workbook或Worksheets物件)
Public Sub SaveValues2()
Dim newWB As Workbook
ThisWorkbook.Worksheets.Copy
Set newWB = ActiveWorkbook 'not great practice
Dim ws As Worksheet
For Each ws In newWB.Worksheets
With ws.UsedRange 'hardcode values
.Value = .Value
End With
Next
newWB.SaveAs Replace(ThisWorkbook.FullName, ".xlsm", "_hardcoded.xlsm"), xlOpenXMLWorkbookMacroEnabled
newWB.Close
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/313359.html
