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



再次感谢您阅读我的问题。我在列范围内输入一个日期,我注意到使用以下方法输入的两个日期之间的格式差异。方法1:我有一个自定义的用户表单,用于在日期选择器-自定义日期选择器弹出式

中看到的活动cellas中输入日期方法二:用ctrl +:键同时输入日期

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

根据方法1,LEN给出日期05.08.2021为10,根据方法2,LEN为5。在下一步中,我使用此日期来派生日历周数,由于两种方法存在差异,因此使用方法1会出现错误,而使用方法2则可以正常工作。最有可能的是,这是因为方法1持有一个非常长的值,因为在我的日历周vba我有这个dim作为整数,我得到了错误。

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

由上述两种方法创建的两个相同的日期在结果为5和10的第二列中。它是用excel公式LEN推导出来的。我的周数vba从这些日期提取周数仅适用于有结果5即当字符串的长度为5的日期。但是当它是10时例如在这个例子中,我得到运行时错误6如图所示运行时错误6

在将日期放入单元格时,不应该使用Format作为将日期转换为文本的功能。

相反,你应该使用CDate或DateValue来获得一个"真实"的日期值,你可以按照自己的需要设置格式,并在计算/比较中使用。

所以,在张贴的代码中尝试替换这个,

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

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

注意,您可能不需要第二行,因为Excel可能会根据需要自动格式化日期,当然是基于区域设置。

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

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

发生另一个错误- VBA运行时错误1004:对象' _ Global '的方法" Range "失败:

代码如下:

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)

最新更新