【问题标题】:Excel VBA Write filename based on system dateExcel VBA 根据系统日期写入文件名
【发布时间】:2016-10-17 10:03:54
【问题描述】:

我正在尝试在 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 &lt; "11:00",但这也不起作用。

有人可以帮帮我吗?

提前致谢!

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

【问题讨论】:

  • 看来这段代码是正确的。为什么你认为你做的不对?
  • 因为它总是写 H16 而不是 H12,因为它应该在 45 分钟前完成 :)
  • 您在 45 分钟前预计的保存时间值是多少? 11 ?
  • 是的。 45 分钟前,系统日期在上午 11 点之前,所以它应该在文件名中添加了文本字符串“H12”,但没有发生。相反,它添加了字符串“H16”。
  • 看起来你使用了Round,而你实际上想用Hour提取小时部分;)

标签: excel vba date-comparison


【解决方案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)。如果您的目标是提取日期的小时,而不是例如在 04:35 返回 5,您可以使用类似 Hour(Now) 的东西,它返回一个整数
  • 我将With Destwb 包裹在If 周围,而不是相反,这会稍微清理您的代码

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

【讨论】:

  • 我不确定您的代码与我的代码有何不同。而且我没有收到错误。整个脚本运行良好。问题是它没有正确评估系统日期。简单来说,我需要它来检查系统日期,如果它不超过上午 11 点,则将文本字符串“H12”添加到文本文件中。如果已经过了上午 11 点,则添加“H16”。就是这么简单,但我没有做正确的时间/日期评估
  • 您所做的是:在10:30:01 之后添加“H16”,因为您将计时器四舍五入到整小时,而不是提取小时部分。我相信我在我的帖子中写道;)使用Hour(Now) 而不是Round(Timer / 3600, 0)
  • 啊,我现在明白你了。几分钟后,我将测试您的建议并给您答复。谢谢!
  • 好了,问题解决了!!非常感谢!
猜你喜欢
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2014-04-30
相关资源
最近更新 更多