将其加载到UserForm文本框后更改日期格式

时间:2014-02-27 14:28:51

标签: excel vba date excel-vba

我有一个带文本框的用户表单。初始化文本框时,它会充满实际日期。我想要做的是用自定义日期格式= 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

1 个答案:

答案 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以其他各种方式格式化日期。