Excel VBA 向单元格添加日期未使用正确的格式

Excel VBA 向单元格添加日期未使用正确的格式

因此,对于我的工作,我正在制作一个 Excel 工作簿 - 主要想法是使用用户窗体将日期添加到另一个(隐藏)工作表。

表单中有多个文本框 - 感兴趣的只有一个 - 日期。这是我的用户表单的代码 -

Private Sub CmdAdd_Click()
On Error Resume Next

    Dim ws As Worksheet
    Set ws = Worksheets("WorkingSheet")
    ws.Visible = xlSheetVisible
    
    Dim lRow As Long
    lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    

    With ws
        .Cells(lRow, 1).Value = Date                            'Adding today's Date
        .Cells(lRow, 2).Value = Me.cmbIDRequested.Value
        .Cells(lRow, 3).Value = Me.txtIDVisitor.Value
        .Cells(lRow, 4).Value = Me.txtVisitDate.Value           'The field im having troube with
        .Cells(lRow, 5).Value = Me.txtCommentary.Value
        .Cells(lRow, 6).Value = Environ("Username")             'Adding user ID
    End With

    Me.cmbIDRequested.Value = ""
    Me.txtIDVisitor.Value = ""
    Me.txtVisitDate.Value = ""
    Me.txtCommentary.Value = ""

    ws.Visible = xlSheetVeryHidden

End Sub

Private Sub CmdClose_Click()

    Unload Me

End Sub

    'Formatting entered data into usable date when user clicks away from the field
Private Sub txtVisitDate_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
    
    If Not IsDate(txtVisitDate.Text) Then
        MsgBox "Enter Correct Date"
        Cancel = True
    End If
    
    Me.txtVisitDate = Format(CDate(txtVisitDate), "dd.mm.yyyy")

End Sub

问题是 - 在我的目标表中,日期看起来就像一个普通日期(例如 - 20.07.2022)。如果我单击单元格然后离开 - 它会正确地将其格式化为日期(将其更改为我想要的任何内容,例如 20.07)。但在我“更新”单元格之前,它就像纯文本一样。我将整个列的格式设置为日期,但我仍然遇到问题。

表格中的形式如下:
在此处输入图片描述

第一行是我“更新”的单元格 - 双击,然后单击离开。您可以看到它们的格式正确,因为文本与右侧对齐。底部单元格是纯文本 - 并且与左侧对齐,就像 Excel 中默认的常规文本一样

答案1

您描述的行为是正确的。MS 帮助说:

TextBox.Value 是文本

这意味着如果您将该值分配给电子表格单元格,它将被写为字符串。

(进入编辑模式和退出编辑模式后字符串自动变成日期已经是Excel的一个功能,而不是这里考虑的宏)

这个问题的直接解决办法是分配一个值输入日期到细胞。例如,可以使用DateValue(日期) 函数

  .Cells(lRow, 4).Value = DateValue(Me.txtVisitDate.Value)

相关内容