Excel VBA根据系统日期写入文件名

时间:2016-10-17 10:03:54

标签: excel vba date-comparison

我正在尝试在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",但这也不起作用。

有人可以帮我一把吗?

提前致谢!

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

1 个答案:

答案 0 :(得分:1)

虽然我不完全确定你的错误是什么(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)。如果您的目标是提取日期的小时,而不是例如在5返回04:35,则可以使用类似Hour(Now)的内容,返回一个整数
  • 我将With Destwb包裹在If周围,而不是相反,这会稍微清理你的代码

编辑:使用工作解决方案更新代码