在 VBA 中保存 Excel 工作表时如何制作唯一的文件名

How to make unique filename when saving Excel worksheet in VBA

我有一个传播sheet,这是我的模板,每个人都可以访问。我希望他们点击的第一个按钮是我的宏 "Save As" 按钮,它保存在我的 SharePoint 上的正确位置。

效果很好!但是......它会在没有警告的情况下覆盖。

我想 1 - 确保它永远不会覆盖 - 我希望它取消进程而不保存一些东西。

其次,我希望将其保存为“[predetermined name]_copy01”,其中 01 可以转到 99,以防按钮在原 sheet 完成后被其他人再次点击人(因此毁了第一人称的一天)。

这是我当前的代码 - 我如何至少获得一个用于覆盖的弹出窗口,甚至更好,获得副本的重命名(我假设这是某种 "if" 或 "if/else"语句)

Sub Save_Workook_NewName()

Dim tillDay As Date

If Time < 11 / 24 Then    
    tillDay = Date - 1 + 11 / 24    
Else    
    tillDay = Now    
End If

Application.AlertBeforeOverwriting = True

Dim path As String
path = "https://ourcorporatesite.sharepoint.com/sites/tills/Shared%20Documents/Nightly%20Tills/"
ThisWorkbook.SaveAs FileName:=path & Format(Now(), "yy-mm-dd") & "_Tills.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, ReadOnlyRecommended:=False

End Sub

为了创建唯一的文件名,我使用了 Excel 用户的用户名和当前时间戳。因此,它确保每个用户始终生成不同的文件名。只需确保代码运行超过 1 秒(或在名称生成器中添加 1 秒等待):

Public Function GenerateName() As String
    GenerateName = Format(Now(), "yyyy_mm_dd_hh_MM_ss") & "_" & Environ("Username")
End Function

在这种情况下,如果要保存文件,则如下所示:2019_11_14_22_08_50_vityata。作为奖励,它可以很容易地按创建日期排序。

可以这样称呼:

ThisWorkbook.SaveAs Filename:=Path & GenerateName & ".xlsm"