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