停止在VBA中更改日期值

时间:2018-11-13 17:05:48

标签: excel vba

Excel不断将我的日期更改为美国格式。我有一个用户表单,用户在其中输入日期。例如,我输入01/11/2018(2018年11月1日)。然后,我将此值放入单元格中,但是它会自动更改为11/01/2018或2018年1月11日。

到目前为止,我已经尝试使用以下代码强制其使用英国格式;

SHT_data_TASKS.Cells(1 + tableRows, 8).NumberFormat = "dd/mm/yyyy;@"
SHT_data_TASKS.Cells(1 + tableRows, 8) = form_addTask_Date.Value

但这没有帮助。我也尝试过使用CDate函数,但还是没有运气。我检查了计算机的区域设置,它们对于英国都是正确的。

如果我右键单击放置日期的单元格,然后选择“格式”,则显示为已被格式化为英国日期!我不确定是什么原因导致了它的改变。

2 个答案:

答案 0 :(得分:0)

这是我在包含英国日期的控件上使用的日期代码:

Private Sub UserForm_Initialize()
    Me.txtDate = Format(Date, "dd-mmm-yyyy")
End Sub  

在日期控制的AfterUpdate事件上:

Private Sub txtDate_AfterUpdate()
    With Me
        FormatDate .txtDate
    End With
End Sub  

在常规模块中:

Public Sub FormatDate(ctrl As Control)

    Dim dDate As Date
    Dim IsDate As Boolean

    If Replace(ctrl.Value, " ", "") <> "" Then
        On Error Resume Next
            dDate = CDate(ctrl.Value)
            IsDate = (Err.Number = 0)
            Err.Clear
        On Error GoTo 0

        If IsDate Then
            ctrl.Value = Format(ctrl.Value, "dd-mmm-yyyy")
            ctrl.BackColor = RGB(255, 255, 255)
        Else
            ctrl.BackColor = RGB(255, 0, 0)
        End If
    End If

End Sub  

然后使用以下代码将其传输到工作表(在“保存”按钮上):

shtRawData.Cells(rLastCell.Row, CLng(lCol)) = CDate(ctrl.Value)

答案 1 :(得分:0)

当您要将日期写到工作表上时:

  1. 验证是否已使用isdate()将其存储为日期(或等效日期)
  2. 通过Range.FormulaLocal而不是valuevalue2进行分配。

未经测试,但是

Range("A1").FormulaLocal = #10/31/2018#