2016-11-23 150 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發現該溶液。

這是我使用的代碼:

相關問題