我试图将我的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创建的工作簿上调用该函数。
答案 0 :(得分:2)
复制没有Destination
excel的工作表时会创建New Workbook
,New Workbook
只有Worksheet
处于活动状态。
编辑:我刚才在最终代码中意识到这些来自原始代码的行:
'Copy the "Print" sheet
Worksheets("Print").Copy
在
内移动With ActiveWorkbook
之前指的是New Workbook
创建的Worksheet.Copy
,现在指的是Source Workbook
那么让我们看看Op的最终代码实际上在做什么:
此处ActiveWorkbook
是[来源工作簿],ActiveSheet
必须是[打印]
With ActiveWorkbook
这会复制ActiveSheet
创建New Workbook
只有一张
ActiveSheet.Copy
这些行正在影响[来源工作簿]中的ActiveSheet
[打印]。
不是因为With
声明,而是因为它是活跃的
Cells.Copy
Range("A1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
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
建议阅读以下页面以深入了解所使用的资源:
答案 1 :(得分: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
答案 2 :(得分:0)
感谢@EEM找到解决方案。
这是我使用的代码:
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