Excel VBA在新创build的工作簿中执行代码

我试图将我的Excel文件中的一个工作表保存到一个新的文件,但没有公式的。

我有这个代码,正在努力获取文件保存:

Sub SaveInvoice() 'Create a filename based on invoicenumber Dim FileName As String FileName = Sheets("Sale").Range("C3").Value 'Copy the "Print" sheet Worksheets("Print").Copy With ActiveWorkbook 'Save the file as new .SaveAs FileName:="C:\" & FileName End With End Sub 

这工作像一个魅力,但是我需要去掉公式的,所以我GOOGLE了,并从这段代码:

 ActiveSheet.Copy Cells.Copy Range("A1").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False 

而且这也是一样的,但是一旦我将两段代码合并在一起,整个函数就会中断。

  With ActiveWorkbook 'Transform cells to values ActiveSheet.Copy Cells.Copy Range("A1").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False 'Save the file as new .SaveAs FileName:="C:\" & FileName End With 

这导致我的基础工作表从配方中剥离。

我需要知道如何在Newle创build的工作簿上调用该函数。

复制工作表时,如果没有“ Destination Excel将创build“ New Workbook ,并且“ New Workbook及其唯一的Worksheet处于活动状态。

编辑:我刚刚意识到,在最后的代码从原来的代码这些行:

 'Copy the "Print" sheet Worksheets("Print").Copy 

被移到里面了

 With ActiveWorkbook 

这是之前提到的由Worksheet.Copy创build的New Workbook ,现在引用了Source Workbook

那么让我们来看看Op的最终代码实际上在做什么:

这里ActiveWorkbook是[Source Workbook], ActiveSheet 必须是[Print]

 With ActiveWorkbook 

这复制ActiveSheet创build一个New Workbook只有一张纸

  ActiveSheet.Copy 

这些行影响[源工作簿]中的ActiveSheet [打印]。 不是因为With语句,而是因为它是活跃的

  Cells.Copy Range("A1").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False 

用于影响所引用的对象的With的命令必须以点[。]开头; 但是这些行是无效的,因为单元格和范围不是方法,也不是工作簿对象的属性,因此错误会被触发。

与声明

在单个对象或用户定义types上执行一系列语句。

(来自msdn.microsoft.com的帮助)

这将保存由With语句引用的Workbook,该语句仍具有公式

  'Save the file as new .SaveAs FileName:="C:\" & FileName End With 

试试这个代码:

 Sub SaveInvoice_TEST_1() 'Create a filename based on invoicenumber Dim FileName As String With ThisWorkbook FileName = .Sheets("Sale").Range("C3").Value 'Copy the "Print" sheet .Worksheets("Print").Copy End With With ActiveWorkbook Rem Replace Formulas with Values .Sheets(1).UsedRange.Value = .Sheets(1).UsedRange.Value2 'Save the file as new .SaveAs FileName:="C:\" & FileName End With End Sub 

build议阅读以下页面,以深入了解所使用的资源:

与声明

尝试如下所示。 阅读“ActiveSheet.Copy”的帮助页面 – 注意它创build一个新的工作簿并激活它

 Dim MyWkbk as workbook set MyWkbk = ActiveWorkbook ActiveSheet.Copy With ActiveWorkbook Cells.Copy Range("A1").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False 'Save the file as new .SaveAs FileName:="C:\" & FileName '.close End With MyWkBk.activate 

感谢@EEM解决scheme被发现。

这是我使用的代码:

 Sub SaveInvoice() Dim FileName As String With ThisWorkbook 'Create a filename based on invoicenumber FileName = .Sheets("Sale").Range("C3").Value 'Copy the "Print" sheet .Worksheets("Print").Copy End With With ActiveWorkbook 'Replace Formulas with Values .Sheets(1).UsedRange.Value = .Sheets(1).UsedRange.Value2 'Save the file as new .SaveAs FileName:="C:\" & FileName End With End Sub