【问题标题】:How to make unique filename when saving Excel worksheet in VBA在VBA中保存Excel工作表时如何制作唯一的文件名
【发布时间】:2020-03-10 23:34:17
【问题描述】:

我有一个电子表格,它是我的模板,每个人都可以访问。我希望他们点击的第一个按钮是我的宏“另存为”按钮,该按钮保存在 SharePoint 上的正确位置。

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

我想 1 - 确保它永远不会覆盖 - 我希望它取消进程而不保存某些内容。

其次,我希望将其保存为“[预定名称]_copy01”,其中 01 可以转到 99,以防在原始人完成工作表后其他人再次点击该按钮(从而破坏第一个人的一天)。

这是我当前的代码 - 我如何至少获得一个覆盖的弹出窗口,甚至更好地获得副本的重命名(我假设这是某种“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

【问题讨论】:

  • 我会交换日期和"Tills" 并将时间添加到您的日期。

标签: excel vba save overwrite save-as


【解决方案1】:

为了制作唯一的文件名,我使用 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"

【讨论】:

  • 其实上面的代码有一个小缺陷——在夏令时可能会失败,当时钟恢复1小时时,名称不会是唯一的。
  • 好的,所以我尝试调整路径并得到错误 1004 并且必须调试 - 这是我更新的代码
  • @AndyLatham - 评论中的代码是什么意思?
  • 'Dim path As String path = "test.sharepoint.com/sites/tills/Shared%20Documents/…" ThisWorkbook.SaveAs FileName:=path & Format(Now(), "yy-mm-dd") & "_" & Format(Now (), "hh:mm:ss") & "_Tills.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, ReadOnlyRecommended:=False'
  • "对象 '_Workbook' 的方法 'SaveAs' 失败
猜你喜欢
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
相关资源
最近更新 更多