【问题标题】:Auto-saving an Excel file opened from a template file自动保存从模板文件打开的 Excel 文件
【发布时间】:2018-03-29 14:28:26
【问题描述】:

我制作了一个启用宏的 Excel 文件 (.xlsm),我想在双击模板后立即将使用模板打开的所有文件保存到某个位置,文件名中包含日期。

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

我希望将其保存在工作周的最后一天。

文件名应为“Week Ending in mm-dd-yyyy)。
我的工作簿中有一个公式可以执行此操作,但我不确定这是否与 VBA 代码相同。

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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    目前实现代码的方式存在许多问题。

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

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

    在“本工作簿”中

    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
    

    * 附录 *

    我没有意识到您使用“.xlsm”作为您的模板开始。您可以使用此中继模板路径,但重新打开保存的“.xlsm”时会遇到问题

    已修改,因此仅在不是“时间表”文件时才保存

    在“本工作簿”中

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 2018-06-13
      • 2019-08-02
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      相关资源
      最近更新 更多