从数据中清除当前文件的副本

有一个工作stream程可以填写表格并在完成后邮寄。 邮件发送的方法将发送当前工作表作为附件,但它应该直接创build工作表的新副本,从中删除所有的数据。

我可以清除当前表格,但这是错误的,因为我需要清除表格。 我已阅读有关在其他工作簿上运行macros,但它无法运行macros。 什么是最好的解决scheme?

Sub SendData_Click() If MsgBox("Sure to send?", vbYesNo, "Confirm") = vbYes Then ' Save current sheet ActiveWorkbook.Save ' Send the current file Mail_ActiveSheet ' Mark this sheet as sent Worksheets("Data").Range("B6").Value = True ' Create a new emptied version Create_New_Copy MsgBox "Your data is sent" End If End Sub Sub Create_New_Copy() Dim Wb As Workbook Dim NewFileName As String Dim FileExtStr As String Dim FilePath As String Set Wb = ActiveWorkbook NewFileName = "FileNameHere " & Format(DateAdd("d", 1, Now), "yyyy-mm-dd") FileExtStr = "." & LCase(Right(Wb.Name, Len(Wb.Name) - InStrRev(Wb.Name, ".", , 1))) FilePath = ActiveWorkbook.Path & "\" & NewFileName & FileExtStr ' # This is the problem, how to clear only the new file?? ' Clear_Sheet_Invoices ' Save this sheet as the new file Wb.SaveCopyAs FilePath End Sub Sub Clear_Sheet_Invoices() Dim Ws As Worksheet Set Ws = Worksheets("MyDataSheet") ' Remove all contents Ws.Range("B2:F999").ClearContents ' Mark the "sent" flag for the new sheet to False Worksheets("Data").Range("B6").Value = False End Sub 

正如你可能会注意到,我使用ActiveWorkbook.SaveCopyAs来创build一个副本,并且我有一个Sub Clear_Sheet_Invoices可以清除所有需要的数据。 如何在新文件上运行这个子文件?

我曾经想过要将MyDataSheet复制到一个新的工作表中,清除数据表,保存新的文件并将工作表复制回来。 在打开一个文件时,我检查一下这个表格是否存在,我将删除这个表格。 是的,该死的丑陋,应该有更好的方法吗? ;)

您可以通过这种方式更改Clear_Sheet_Invoices()的定义,使其需要Workbooktypes的参数,并将清除此工作簿中的工作表“MyDataSheet”。

然后你可以调用这个子,并把新创build的工作簿作为参数。

下面是你需要改变来实现它的代码:

 Sub Clear_Sheet_Invoices(Wb As Workbook) Dim Ws As Worksheet Set Ws = Wb.Worksheets("MyDataSheet") ' Remove all contents Ws.Range("B2:F999").ClearContents ' Mark the "sent" flag for the new sheet to False Wb.Worksheets("Data").Range("B6").Value = False End Sub 

 Sub Create_New_Copy() Dim Wb As Workbook Dim NewWb As Workbook Dim NewFileName As String Dim FileExtStr As String Dim FilePath As String Set Wb = ActiveWorkbook NewFileName = "FileNameHere " & Format(DateAdd("d", 1, Now), "yyyy-mm-dd") FileExtStr = "." & LCase(Right(Wb.Name, Len(Wb.Name) - InStrRev(Wb.Name, ".", , 1))) FilePath = ActiveWorkbook.Path & "\" & NewFileName & FileExtStr ' Save this sheet as the new file Wb.SaveCopyAs FilePath Set NewWb = Excel.Workbooks.Open(FilePath) ' # This is the problem, how to clear only the new file?? Call Clear_Sheet_Invoices(NewWb) Call NewWb.Close(True) End Sub 

方法SendData_Click不需要任何改变。