Excel VBA 根据系统日期写入文件名
Excel VBA Write filename based on system 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
占位符中使用了 /
,但我相信您知道您必须在 VBA 中使用 \
作为路径分隔符
- 我不确定你是否真的想做
SaveTime = Round(Timer / 3600, 3)
。如果您的目标是提取日期的小时数,而不是例如 04:35
处的 return 5
,您可以使用 Hour(Now)
之类的东西,其中 return s 一个整数
- 我将
With Destwb
包裹在 If
周围,而不是相反,这样可以稍微清理一下您的代码
编辑:使用有效解决方案更新了代码
我正在尝试在 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
占位符中使用了/
,但我相信您知道您必须在 VBA 中使用\
作为路径分隔符 - 我不确定你是否真的想做
SaveTime = Round(Timer / 3600, 3)
。如果您的目标是提取日期的小时数,而不是例如04:35
处的 return5
,您可以使用Hour(Now)
之类的东西,其中 return s 一个整数 - 我将
With Destwb
包裹在If
周围,而不是相反,这样可以稍微清理一下您的代码
编辑:使用有效解决方案更新了代码