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更新代码