因此,对于我的工作,我正在制作一个 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 帮助说:
这意味着如果您将该值分配给电子表格单元格,它将被写为字符串。
(进入编辑模式和退出编辑模式后字符串自动变成日期已经是Excel的一个功能,而不是这里考虑的宏)
这个问题的直接解决办法是分配一个值输入日期到细胞。例如,可以使用DateValue(日期) 函数
.Cells(lRow, 4).Value = DateValue(Me.txtVisitDate.Value)