【问题标题】:VBA - Save macro naming workbookVBA - 保存宏命名工作簿
【发布时间】:2019-05-22 21:52:00
【问题描述】:

我有下面的代码来保存当前工作簿并将今天的日期附加到文件名的末尾。我将如何修改代码,因此如果要在同一天保存工作簿的两个副本,第一个将正常保存为“Workbook Name, Today's Date.xlsm”,第二个将另存为“Workbook Name, Today's Date Copy 2.xlsm”而不是“Workbook Name, Today's Date, Today's Date.xlsm”(将日期两次附加到末尾文件名,这就是它现在所做的)。如果工作簿每天要保存 3、4、5 次,它们应该保存为副本 3、4、5 等...

`Sub Save_Workbook()

Const Path = "H:\HR\Cole G\Timehseet Test Path\"
Dim FileName As String
Dim Pos As Long

Pos = InStrRev(ActiveWorkbook.Name, ".") - 1
' If there wasn't a ".", then the file doesn't have an extension and Pos = -1
If Pos < 0 Then Pos = Len(ActiveWorkbook.Name)

' Now put everything together, including the file extension...
ActiveWorkbook.SaveAs Path & Left(ActiveWorkbook.Name, Pos) & Format    (Now, "d-mm-yyyy") & Mid(ActiveWorkbook.Name, Pos + 1)

End Sub`

【问题讨论】:

  • 您必须读取文件保存位置以确保不存在具有该名称的另一个文件。如果是,请读取文件名和重复项并“复制”并在文件夹 +1 中计数
  • @Cyril Ahh 好吧,我试试看!谢谢!

标签: vba excel


【解决方案1】:

您可以尝试这样的递归方法(未测试):

Sub CreateCopyFile(ByVal oldFileName As String, Optional ByVal copyNo As Long = 1)
    If FileLen(oldFileName & " Copy (" & copyNo & ")") Then
        CreateCopyFile(oldFileName, copyNo + 1)
    Else
        ActiveWorkbook.SaveAs oldFileName & " Copy (" & copyNo & ")"
    End If
End Sub

然后将您的代码更改为以下内容:

Dim potentialFileName As String    
potentialFileName = Path & Left(ActiveWorkbook.Name, Pos) & Format(Now, "d-mm-yyyy") & Mid(ActiveWorkbook.Name, Pos + 1)

If FileLen(potentialFileName) Then
    CreateCopyFile(potentialFileName)
Else
    ActiveWorkbook.SaveAs potentialFileName
End If

'// rest of code here.... 

曾经有一种更简洁的方法可以使用命令提示符执行此操作,但近年来似乎 Windows 不再允许在不更改安全设置的情况下通过 VBA 使用它(我不建议这样做...)

【讨论】:

    【解决方案2】:
    If Dir(Path & Left(ActiveWorkbook.Name, Pos) & Format    (Now, "d-mm-yyyy") & Mid(ActiveWorkbook.Name, Pos + 1)) <> "" Then
            ActiveWorkbook.SaveAs Filename:=Path & Left(ActiveWorkbook.Name, Pos) & copy 2 & Mid(ActiveWorkbook.Name, Pos + 1)
    Else
            ActiveWorkbook.SaveAs Filename:=Path & Left(ActiveWorkbook.Name, Pos) & Format    (Now, "d-mm-yyyy") & Mid(ActiveWorkbook.Name, Pos + 1)
    

    使用它来保存您的文件

    【讨论】:

    • 这会删除日期并用副本 2 替换它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2014-04-25
    相关资源
    最近更新 更多