Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 创建文件的硬拷贝并保持原始文件不变_Vba_Excel - Fatal编程技术网

Vba 创建文件的硬拷贝并保持原始文件不变

Vba 创建文件的硬拷贝并保持原始文件不变,vba,excel,Vba,Excel,我有一个名为测试的文件。该文件由以下简单电子表格组成: 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\" &am

我有一个名为
测试
的文件。该文件由以下简单电子表格组成:

     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
到目前为止,所有这些都很有效。将创建硬拷贝并关闭原始文件


但是,这段代码也硬拷贝了原始工作表中的值,但我的想法是保持原始文件不变。因此,我使用了行
thiswoolk.Close SaveChanges=False
,但不知怎的,它仍然将更改保存在原始文件中


你知道如何解决这个问题吗?

你的主要问题是

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
    

    你知道“硬拷贝”(又名)是一张或多张打印的纸,代表一个电子文件,是吗?它不是一个所有公式都已解析为返回值的工作簿。(来源:)完美。正是我想要的。感谢您提供额外的替代代码。