从模板文件打开后自动保存Excel文件

时间:2018-03-29 14:28:27

标签: excel excel-vba vba

我制作了一个启用宏的Excel文件(.xlsm),我想将使用该模板打开的所有文件保存到具有特定文件名的特定位置。在我的情况下,我想打开它并在双击模板后立即将其与日期保存在文件名中。现在,我有这个VBA代码,它没有做我想要的。

Private Sub Workbook_Open()
    ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Format(Now, "yyyy-mm-dd") & " Timesheet"
End Sub

理想情况下,我希望在工作周的最后一天保存。因此,文件名应该是“以mm-dd-yyyy结尾的周末。”我的工作簿中有代码已经执行此操作,但我不确定Workbook代码是否与VBA代码相同(我总共VBA newb)

=IF(WEEKDAY(TODAY())=7,TODAY()-1,IF(WEEKDAY(TODAY())=6,TODAY(),TODAY()-WEEKDAY(TODAY())-1))

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您目前如何实施代码存在许多问题。

  
      
  1. 打开模板文件将自动保存,因此编辑原始文件会变得更加困难
  2.   
  3. 如果您将模板路径作为普通文件打开,则无法访问模板路径
  4.   

希望以下内容有助于实现模板,尽管您需要在代码中对所需路径进行硬编码

  

在ThisWorkbook'

Private Sub Workbook_Open()
    Call SaveFromTemplate
End Sub
  

在模块中

Function SaveFromTemplate()
    Dim Path As String: Path = ActiveWorkbook.FullName
    If Not Right(Path, Len(Path) - InStrRev(Path, ".")) = "xltm" Then
        Path = "C:\Edit this path\"
        ' Friday = 6
        ThisWorkbook.SaveAs Path & Format(WeekdayDate(Date, 6), "yyyy-mm-dd") & " Timesheet"
    End If
End Function

Function WeekdayDate(DateVal As Date, DayInWeek As Long) As Date
    DayInWeek = DayInWeek Mod 7
    Dim DayOffset As Long: DayOffset = DayInWeek - Weekday(DateVal) + IIf(DayInWeek - Weekday(DateVal) < 0, 7, 0)
    WeekdayDate = DateAdd("d", DayOffset, DateVal)
End Function

* ADDENDUM *

我没有意识到你正在使用&#39; .xlsm&#39;作为你的模板开始。您可以使用此中继模板路径,但在重新打开已保存的&#39; .xlsm&#39;

时会出现问题

已修改,只有在不是&#39;时间表的情况下才会保存。档案

  

在ThisWorkbook&#39;

Private Sub Workbook_Open()
    If InStr(ThisWorkbook.FullName, "Timesheet") = 0 Then
        ' Friday = 6
        ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Format(WeekdayDate(Date, 6), "yyyy-mm-dd") & " Timesheet"
    End If
End Sub