2016-11-23 122 views
0

我试图将我的Excel文件中的一个工作表保存为新文件,但没有公式。Excel VBA在新创建的工作簿中执行代码

我有这样的代码,正在得到保存的文件:

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 

这个工程就像一个魅力,但我需要去掉公式的,所以我一派,发现那位这段代码:

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创建的工作簿上调用该函数。

回答

2

当复制没有Destination的工作表时,excel创建了New Workbook,而New Workbook及其仅有的Worksheet处于活动状态。

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

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

被感动的

With ActiveWorkbook 

内先前指通过创建New WorkbookWorksheet.Copy现在指的是Source Workbook

因此,让看看有什么作品的最终代码实际上是这样做的:

这里ActiveWorkbook是[来源簿]和ActiveSheet必须[打印]

With ActiveWorkbook 

此份ActiveSheet创建New Workbook只有一个片

 ActiveSheet.Copy 

这些线影响的[Source簿]的ActiveSheet [打印]。 不是因为With声明,而是因为它是一个活动

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

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

with语句

执行一系列单个对象或用户定义的类型上的语句。

(从msdn.microsoft.com帮助)

这样可以节省由With发言中提到的工作簿,仍然有公式

'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 

推荐阅读以下页面来获得使用的资源进行更深入的了解:

With Statement

+0

不工作时,保存原始文件的副本。 – Nautilus

+0

奇怪的是,它在我所有的测试中都运行良好,但现在只需进行编辑并让我知道...... – EEM

+0

检查!这就是诀窍!谢谢! – Nautilus

0

尝试像下面这样。阅读“ActiveSheet.Copy”帮助页面 - 请注意,它创建了一个新的工作簿,并激活它

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 
+0

好吧,这是奇怪的事情。 ActiveSheet.Copy确实创建了一个副本,但似乎没有激活复制的文件。除了保存,这是我可以在“With ActiveWorkbook”中运行的唯一函数 – Nautilus

+0

'Sheet.Copy'的行为与预期的一样,问题在于'With'语句的不正确使用。请参阅[With Statement](https://msdn.microsoft.com/EN-US/library/office/gg264723.aspx) – EEM

0

由于@EEM发现该溶液。

这是我使用的代码:

相关问题