我有一个带文本框的用户表单。初始化文本框时,它会充满实际日期。我想要做的是用自定义日期格式= DD-MM-YYYY
我在下面写了代码并且有些不对劲但我不知道出了什么问题。代码在插入值之前有msgbox,MsgBox
以自定义格式显示日期,但是当它传递给textbox.value
时,它就像M/DD/YYY
。
Dim year As Long, year_control As Date
year = Format(Date, "yyyy")
year_control = Format(Date, "dd-mm-yyyy")
MsgBox (year_control)
textbox.Value = year_control
(...)
If year_control < "01-04-" & year Then
Me.Controls("rok1").Value = True
Else
Me.Controls("rok2").Value = True
End If
答案 0 :(得分:1)
您无法“格式化”日期变量:
year_control As Date
year_control = Format(Date, "dd-mm-yyyy")
上面的代码什么也没做,因为Date变量只是简单地为日期保留日期VBA将Date变量存储为IEEE 64位(8字节)浮点数,代表日期从9999年1月1日到12月31日以及时间从0:00:00到23:59:59。
无论您对此变量执行什么操作,它都将始终根据计算机识别的短日期格式显示日期。时间根据计算机识别的时间格式(12小时或24小时)显示。
因此,虽然您可以更改Date
变量所保留的内部值,但您无法将其格式存储在同一个变量中。
然而,您可以在字符串变量中显示它。所以,如果您使用:
Dim year As Long, year_control As Date
Dim strYear_control As string
year = Format(Date, "yyyy")
year_control = Format(Date, "dd-mm-yyyy")
strYear_control = Format(year_control , "dd-mm-yyyy")
MsgBox (strYear_control)
textbox.Value = strYear_control
它应该按照您的预期工作。因为Format()
函数将返回一个Variant(String),其中包含根据格式表达式中包含的指令格式化的表达式。
作为旁注,您可能还希望使用
Format$(year_control , "dd-mm-yyyy")
因为速度会快得多,您还可以使用FormatDateTime
以其他各种方式格式化日期。