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 周围,而不是相反,这样可以稍微清理一下您的代码

编辑:使用有效解决方案更新了代码