Excel VBA根据系统date编写文件名

我想在Excel中写一个VBA脚本来保存一个文件,并给出一个预定义的名字。 其中一个标准是,如果不是过了上午11点,那么它应该添加到文件名“H12”。 如果是过了上午11点,那么应该加上“H16”。

这是我迄今为止,关于这个特定的部分(有更多的代码是不相关的显示在这里:

Dim SaveTime As Integer SaveTime = Round(Timer / 3600, 0) dt = Format(CStr(Now), "yyyy_mm_dd") FolderName = "path/to/file" If SaveTime < 11 Then With Destwb .SaveAs FolderName _ & "\" & Destwb.Sheets(1).Name & dt & "H12", _ FileFormat:=FileFormatNum .Close False End With Else With Destwb .SaveAs FolderName _ & "\" & Destwb.Sheets(1).Name & dt & "H16", _ FileFormat:=FileFormatNum .Close False End With End If 

除了这部分,脚本正常工作,因为它总是将文件保存为“H16”。 冉45分钟前,它应该写为“H12”。 我相信我没有正确地进行时间比较。 我试过比较, if dt < "11:00"但也不起作用。

有人能帮我一把吗?

提前致谢!

编辑:添加最后一个细节。

虽然我不完全确定你的错误是什么(哪一行是由Err#引起的),我希望这有助于你解决你的问题

 (...) Dim SaveTime As Integer SaveTime = Hour(Now) FolderName = "C:\Users\b036081\NoBackupData" FileFormatNum = 51 ' that's xlsx without macros With Destwb If SaveTime < 11 Then .SaveAs FolderName _ & "\" & .Sheets(1).Name & dt & "H12", FileFormatNum '.Close False Else .SaveAs FolderName _ & "\" & .Sheets(1).Name & dt & "H16", FileFormatNum '.Close False End If End With 
  • 我注意到你在你的FolderName -placeholder中使用了/ ,但是我相信你知道你必须在VBA中使用\作为path分隔符
  • 我不确定你是否真的想要SaveTime = Round(Timer / 3600, 3) 。 如果你的目标是提取date的小时,而不是例如在04:35返回5 ,你可以使用像Hour(Now) ,这返回一个整数
  • 我围绕If包装了With Destwb ,而不是其他的方法,这会清理你的代码

编辑:用工作解决scheme更新代码