如何在用户窗体中格式化日期选择器 (DD.MM.YY)

How to format the date picker (DD.MM.YY) in an userform

感谢您再次阅读我的问题。我在列范围内输入一个日期,我注意到使用以下方法输入的两个日期之间的格式不同。 方法 1:我有一个自定义的用户表单,用于在 Date picker-custom date picker pop-up

中看到的活动单元格中输入日期

方法二:我用的是Cntrl+:一起输入日期

虽然单元格格式相同,但我注意到我使用 excel 中的 LEN 公式调查的两个日期有所不同。

LEN 通过方法 1 和方法 2 为我提供日期 05.08.2021 为 10,LEN 为 5。 在下一步中,我使用这个日期来导出日历周数,并且由于这两种方法存在差异,我在使用方法 1 时遇到错误,并且它在方法 2.Most 中工作正常,可能是因为方法 1持有一个很长的值,因为在我的日历周 vba 我有这个暗淡的整数,我得到了错误。

谢谢你,希望我能在这里得到帮助。

Two same dates created by the above two methods explained 在结果为 5 和 10 的第二列中。它是通过使用 excel 公式 LEN 得出的。我的周数 vba 从这些日期中提取周数仅适用于结果为 5 的日期,即当字符串的长度为 5 时。但是在这种情况下,例如当它为 10 时,我得到 运行时间错误6 如图Run-time error 6

实际上代码很乱。我希望这是你想要检查的代码。

Sub setDate()
Dim tempUFX As Object
'Dim tempUFX As Object

Dim ufr As Object
For Each ufr In UserForms
If ufr.Name = FormName_SetDate Then
      Set tempUFX = ufr
  Exit For
End If
Next ufr

If Not tempUFX Is Nothing Then
   'Set tempUFX = UserForms(FormName_SetDate)
   tempUFX.Controls(ctrlName_SetDate).Value = sDate
  
   tempUFX.Controls(ctrlName_SetDate).SetFocus
End If
Unload PopDatePickerX
Range(cCell).Value = Format(sDate, DatePickerX_DateFormat)

'Range(cCell).NumberFormat = "dd.mm.yyyy" ' added on 05.08.2021

    Unload PopDatePickerX
End Sub

将日期放入单元格时,不应使用 Format,因为那样会将日期转换为文本。

相反,您应该使用 CDate 或 DateValue 来获取 'real' 日期值,您可以根据需要设置格式,并在 calculations/comparisons.

中使用

所以,在发布的代码中尝试替换它,

Range(cCell).Value = Format(sDate, DatePickerX_DateFormat)

有了这个。

Range(cCell).Value = CDate(sDate)

Range(cCell).NumberFormat = "dd.mm.yyyy" ' added on 05.08.2021

请注意,您可能不需要第 2 行,因为 Excel 可能会根据区域设置自动根据需要设置日期格式。

发生另一个错误 - VBA 运行 时间错误 1004:对象“_ Global”的方法“范围”失败:

代码如下:

Sub setDate()
Dim tempUFX As Object


Dim ufr As Object
For Each ufr In UserForms
If ufr.Name = FormName_SetDate Then
      Set tempUFX = ufr
  Exit For
End If
Next ufr

If Not tempUFX Is Nothing Then

   tempUFX.Controls(ctrlName_SetDate).Value = sDate
  
   tempUFX.Controls(ctrlName_SetDate).SetFocus
End If
Unload PopDatePickerX
Range(cCell).Value = CDate(sDate)


    Unload PopDatePickerX
End Sub

前面提到的解决方案有效,但当我有一个定义范围(O 列和 R 列)的日期日历时就是这种情况。相同的日期选择器也用在用户窗体上,现在在执行此用户窗体时,在选择日期后发生此错误。

调试器突出显示以下行:-

  Range(cCell).Value = CDate(sDate)