如何在Excel中用户公司后面的代码中强制日期格式为YYYY-MM-DD

如何在Excel中用户公司后面的代码中强制日期格式为YYYY-MM-DD,excel,date,Excel,Date,在工作表“Verzendlijst_PostNL”的B2单元格中,日期将通过文本框输入:txtDate,然后使用filldown直到下一行的数据。这工作正常,但我需要在Excel工作表行中强制将日期设置为YYYY-MM-DD。 我应该把什么代码放在哪里? 多谢各位 Private Sub cmdAdd_Click() Dim ws As Worksheet Dim LastRow As Long Set ws = Worksheets("Verzendlijst_PostNL") ws.Ran

在工作表“Verzendlijst_PostNL”的B2单元格中,日期将通过文本框输入:txtDate,然后使用filldown直到下一行的数据。这工作正常,但我需要在Excel工作表行中强制将日期设置为YYYY-MM-DD。 我应该把什么代码放在哪里? 多谢各位

Private Sub cmdAdd_Click()
Dim ws As Worksheet
Dim LastRow As Long
Set ws = Worksheets("Verzendlijst_PostNL")

ws.Range("B2") = txtDate.Value
ws.Range("J2") = txtDes.Value

LastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    Range("B2:B" & LastRow).FillDown
LastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    Range("J2:J" & LastRow).FillDown

Me.txtDate.Value = ""
Me.txtDes.Value = ""
Me.txtDate.SetFocus
End Sub

我在Excel文件中重新创建了您的问题,并提出了以下(有效)解决方案:

Option Explicit

Private Sub cmdAdd_Click()

Dim ws As Worksheet
Dim LastRow As Long
Set ws = ThisWorkbook.Worksheets("Verzendlijst_PostNL")

If IsDate(Me.txtDate.Value) Then
    ws.Range("B2").Value = CDate(Me.txtDate.Value)
Else
    ws.Range("B2").Value = Me.txtDate.Value
End If
If IsDate(Me.txtDes.Value) Then
    ws.Range("J2").Value = CDate(Me.txtDes.Value)
Else
    ws.Range("J2").Value = Me.txtDes.Value
End If

LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    ws.Range("B2:B" & LastRow).FillDown
    ws.Range("J2:J" & LastRow).FillDown
    ws.Range("B2:B" & LastRow).NumberFormat = "YYYY-MM-DD"
    ws.Range("J2:J" & LastRow).NumberFormat = "YYYY-MM-DD"

Me.txtDate.Value = ""
Me.txtDes.Value = ""
Me.txtDate.SetFocus

End Sub

注:


代码正在验证文本框
txtDate
txtDesc
中是否存在可识别的日期。只有在这种情况下,VBA才会尝试将文本转换为实际日期。如果不是这样,VBA会将文本插入单元格中,并且不管日期格式如何,值都会显示为(无法识别的)文本。

我在Excel文件中重新创建了您的问题,并提出了以下(有效的)解决方案:

Option Explicit

Private Sub cmdAdd_Click()

Dim ws As Worksheet
Dim LastRow As Long
Set ws = ThisWorkbook.Worksheets("Verzendlijst_PostNL")

If IsDate(Me.txtDate.Value) Then
    ws.Range("B2").Value = CDate(Me.txtDate.Value)
Else
    ws.Range("B2").Value = Me.txtDate.Value
End If
If IsDate(Me.txtDes.Value) Then
    ws.Range("J2").Value = CDate(Me.txtDes.Value)
Else
    ws.Range("J2").Value = Me.txtDes.Value
End If

LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    ws.Range("B2:B" & LastRow).FillDown
    ws.Range("J2:J" & LastRow).FillDown
    ws.Range("B2:B" & LastRow).NumberFormat = "YYYY-MM-DD"
    ws.Range("J2:J" & LastRow).NumberFormat = "YYYY-MM-DD"

Me.txtDate.Value = ""
Me.txtDes.Value = ""
Me.txtDate.SetFocus

End Sub

注:


代码正在验证文本框
txtDate
txtDesc
中是否存在可识别的日期。只有在这种情况下,VBA才会尝试将文本转换为实际日期。如果不是这样的话,VBA会将文本插入单元格中,并且不管日期格式如何,值都会显示为(无法识别的)文本。

可能是
范围(“B2:B”和LastRow)。NumberFormat=“yyyy-mm-dd”
?如何
范围(“B2:B”和LastRow)。NumberFormat=“yyy-mm-dd”
?@jeeed伟大的团队合作精神。你负责column
J
,而我负责column
B
。当然,我慢了30秒。但话说回来。。。谁比你跑得快?@Ralph-如果你发布答案,包括。。。哪里原始问题的一部分。@Ruud van Deursen-所有这些都发生在Verzendlijst_PostNL工作表上吗?代码是否在Verzendlijst_PostNL工作表代码表上?您正在限定
ws.Range(“B2”)
的父级,但不限定
单元格(…
范围(“B2:B”),…
等。可能是
范围(“B2:B”和LastRow)。NumberFormat=“yyy-mm-dd”
?范围(“B2:B”和LastRow)如何?@团队合作非常出色。你在照顾column
J
,而我的工作是在
B列
。当然,我比你慢了30秒。但话说回来……谁比你快?@Ralph-如果你把原始问题的…where…部分写进去。@Ruud van Deursen-这一切都是在Verz上发生的吗endlijst_PostNL工作表?是否为Verzendlijst_PostNL工作表代码表上的代码?您正在限定
ws.Range(“B2”)
的父级,但不限定
单元格(…
Range(“B2:B”),…
等等。亲爱的拉尔夫,你是最棒的。工作完美。非常感谢你,祝你度过愉快的一天。亲爱的拉尔夫,你是最棒的。工作完美。非常感谢你,祝你度过愉快的一天。