全局VBA日期格式和小数分隔符

时间:2016-07-08 14:53:21

标签: excel-vba formatting userform vba excel

有没有办法在PC上全局更改VBA设置以接受指定格式的日期和数字? (根据我的情况,dd / mm / yyyy和逗号)

更改Excel设置并不能解决它。

作为VBA的小型开发人员,我主要为数据输入和验证创建用户表单。除了一些基本的访问权限外,它还使用户(主要是客户的雇佣武器)不会在数据库上输入并破坏它。

但是,在表单提交时,文本框值会暂时保存在电子表格的单元格中。不知何故,在这一步骤日期被扰乱,在某些情况下,3位小数数字乘以一千(例如1/2/2000转到2/1/2000和1,234转1234)。它破坏了这些应用程序的整个目的 - 数据被破坏。

我已经能够使用Format(expression, format)函数解决这些问题,但必须在每次添加日期或某个精确数字时应用,或者甚至在某些辅助任务中使用。

这对我来说是一个经常出现的问题,因为作为巴西人,日期的格式为dd / mm / yyyy,小数分隔符为","(逗号)几乎占我本地用户的100%。

有人有类似的问题吗?

TIA

3 个答案:

答案 0 :(得分:1)

Excel没有默认日期格式。 Excel使用窗口系统日期格式设置。您可以转到控制面板 - >更改系统设置。更改日期,时间和数字格式。

Change Date Format in Windows 7, 8.1 and Windows 10 to dd-mm-yyyy

将Windows系统设置调整为dd-mm-yyyy后,CDate将期望字符串为dd-mm-yyyy。

  

范围(“A1”)。值= CDate(“11/01/2016”)

结果:2016年1月11日,星期一

答案 1 :(得分:0)

懒惰阅读的评论摘要。

好吧,正如Thomas Inzina指出的那样,海峡对我问题的回答是否定的,你不能,因为VBA中没有这样的全球环境。

正如Rory指出的那样,CDate函数应该解决(事实上确实如此)这个问题,至少是关于日期。同样,托马斯的回答没有包含它,但它指向了CDate函数将使用的窗口配置。

由cyboashu建议的Datetimepicker也可以解决这个问题,但需要在用户的PC上进行一些调整才能使用。对我来说工作太多了。虽然,这种方法具有“漂亮”的优势,但为您的项目增加了价值。

仍然在寻找逗号/点坏转换问题。我会继续编辑这个答案,而没有更好的答案。

答案 2 :(得分:0)

在这里,我编写了一个名为gdate的函数,该函数接受具有特定格式的日期的字符串。然后,我解析字符串,然后根据用户日期设置调用cdate。

我要做的就是在整个代码中用gdate查找/替换cdate。现在,我可以通过始终期望一个精确的gdate(“ mm / dd / yyyy”)来处理所有日期格式。如果希望使用其他格式,请调整解析。构建内置的对象和功能是我们使事物工作的方式。

Function gdate(ByVal dstring As String)
    '  0 = month-day-year;   1 = day-month-year;   2 = year-month-day
    d = Mid(dstring, InStr(1, dstring, "/") + 1, Len(dstring) - 5 - InStr(1, dstring, "/"))
    m = Left(dstring, InStr(1, dstring, "/") - 1)
    y = Right(dstring, 4)
    dtype = Application.International(xlDateOrder)

    Select Case dtype
        Case 0: gdate = CDate(m & "/" & d & "/" & y)
        Case 1: gdate = CDate(d & "/" & m & "/" & y)
        Case 2: gdate = CDate(y & "/" & m & "/" & d)
    End Select

End Function