我有一个名为testing
的文件。该文件包含以下简单的电子表格:
A B C D
1 Revenue 5.000
2 Costs -4.000
3 Profit 1.000 =SUM(B1:B2)
4
5
现在,我想在桌面上创建此电子表格的硬拷贝。因此,我使用此VBA:
Sub Create_Hardcopy()
Call Hardcopy
ActiveWorkbook.SaveCopyAs "C:\Users\" & Environ("Username") & "\Desktop\Testing-HC.xlsm"
Workbooks.Open "C:\Users\" & Environ("Username") & "\Desktop\Testing-HC.xlsm", UpdateLinks:=False
ThisWorkbook.Close SaveChanges = False
End Sub
Sub Hardcopy()
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
到目前为止,所有这些都工作正常。硬拷贝已创建,原始文件已关闭。
但是,此代码还可以硬拷贝我的原始工作表中的值,但是我的想法是保持原始文件不变。因此,我使用了ThisWorkbook.Close SaveChanges = False
行,但仍然以某种方式将更改保存在原始文件中。
您知道如何解决此问题吗?
答案 0 :(得分:0)
您的主要问题是
中的语法ThisWorkbook.Close SaveChanges = False
是错误的,必须是
ThisWorkbook.Close SaveChanges:=False
注意用:=
代替=
。
反之亦然。
所以您最终会遇到这样的情况
Public Sub CreateConstantWorkbookCopy()
ThisWorkbook.SaveCopyAs "C:\Users\" & Environ("Username") & "\Desktop\Testing-HC.xlsm"
Dim WbCopy As Workbook
Set WbCopy = Workbooks.Open("C:\Users\" & Environ("Username") & "\Desktop\Testing-HC.xlsm", UpdateLinks:=False)
ReplaceAllFormulasWithValues WbCopy
ThisWorkbook.Close SaveChanges:=False
End Sub
Public Sub ReplaceAllFormulasWithValues(wb As Workbook)
Dim i As Integer
For i = 1 To wb.Worksheets.Count
wb.Worksheets(i).Cells.Copy
wb.Worksheets(i).Cells.PasteSpecial Paste:=xlPasteValues
Next i
End Sub