我正在使用 Excel 2010 中的 VBA 脚本,该脚本根据事件的日期从 MySQL 数据库中获取某些事件。数据库中的日期存储在 "yyyy-mm-dd hh:mm:ss" 中。我的用户将使用从开始到日期范围来过滤他们感兴趣的事件。为了让他们更容易,我使用两个日历控件 (mscal.ocx) 作为范围 - Calendar1 用于 from 和 Calendar2 用于 to。我编写了两个简单的子例程,以确保每次单击日历都会自动更新我从中获取查询字符串数据的单元格,如下所示:
Private Sub Calendar1_Click()
Dim date1, datetime1, time1 As Date
Cells(29, 10) = CDbl(Calendar1.Value)
Cells(29, 10).NumberFormat = "yyyy-mm-dd"
Cells(30, 10).NumberFormat = "hh:mm:ss"
Cells(31, 11).NumberFormat = "yyyy-mm-dd hh:mm:ss"
date1 = Cells(29, 10)
time1 = Cells(30, 10)
datetime1 = date1 & " " & time1
Cells(31, 10) = datetime1
Cells(29, 10).Select
End Sub
Private Sub Calendar2_Click()
Dim date2, datetime2, time2 As Date
Cells(29, 11) = CDbl(Calendar2.Value)
Cells(29, 11).NumberFormat = "yyyy-mm-dd"
Cells(30, 11).NumberFormat = "hh:mm:ss"
Cells(31, 11).NumberFormat = "yyyy-mm-dd hh:mm:ss"
date2 = Cells(29, 11)
time2 = Cells(30, 11)
datetime2 = date2 & " " & time2
Cells(31, 11) = datetime2
Cells(29, 11).Select
End Sub
好吧,它几乎完成了我想要它做的事情,即将日历控件给出的格式从 dd/mm/yyyy 更改为 yyyy-mm-dd。是的,几乎,因为它只在日期值介于 1 到 12 之间时才有效,所以我的日期时间单元格正确显示为“yyyy-mm-dd hh:mm:ss”。对于 13 到 31 天的值,我的日期时间单元格没有被格式化,而是显示为“dd/mm/yyyy hh:mm:ss”。
现在,值得注意的是,无论日期如何,单元格 29,10 和 29,11 始终具有正确的格式 (yyyy-mm-dd),问题在于单元格 31,11 和 31,10。
现在,当我双击单元格时,光标在其中闪烁并按回车键,执行格式并将格式更改为正确的格式(即使对于 13 到 31 之间的日期值)。然而,这样做的目的是尽可能地自动化一切,所以这并不是一个真正的解决方案。如果需要,我可以附加该文件,因为我确实意识到它适用于某些值而不适用于其他值听起来有点荒谬。
请帮忙 !
编辑 ::
好的,再次感谢您的快速回答,我检查了您的解决方案,有了它,我有点回到了开始。使用
Private Sub CommandButton1_Click()
Dim date1, date2, datetime1, datetime2, time1, time2, time3 As Date
date1 = Cells(29, 10)
time1 = Cells(30, 10)
datetime1 = Format(date1, "dd/mm/yyyy") & " " & Format(time1, "hh:mm:ss")
Cells(31, 10) = datetime1
End Sub
效果很好,但仅当日值从 1 到 12 时才有效,例如,对于单元格值
日期
2012-09-12
时间
15:00:00
答案如我所愿,即
约会时间
2012-09-12 15:00:00
但是,一旦我将日期值设置为高于 12,即 13 到 31,它就会停止正常工作(是的,我知道这听起来多么荒谬),而我得到的结果是:
约会时间
13/09/2012 15:00:00
任何建议都非常感谢...