繁体   English   中英

excel日期格式与vba中的格式不同

[英]excel date format not same as in vba

我在excel中发现了日期格式的问题,其显示格式与vba中的numberformat ,我已经为这种情况创建了一个测试。

Regional Setting for Short Date: MM/dd/yyyy

模块:

Function RetrieveNumberFormat() As String
    Dim rng As Range
    Set rng = Application.Caller    
    RetrieveNumberFormat = rng.NumberFormat       
    Set rng = Nothing
End Function

Function SetDate() As String
    Dim rng As Range    
    Set rng = Application.Caller    
    SetDate = Format(Now, rng.NumberFormat)    
    Set rng = Nothing
End Function

在Excel中

Col A (Date w default format) | Col B (MM/dd/yyyy)      | Col C (dd-mmm-yyyy)     | Col D (dd/mm/yyyy)      | Col E ([$-404]mm/dd/yyyy)
=Now()                        | =Now()                  | =Now()                  | =Now()                  | =Now()
=RetrieveNumberFormat()       | =RetrieveNumberFormat() | =RetrieveNumberFormat() | =RetrieveNumberFormat() | =RetrieveNumberFormat()
=SetDate()                    | =SetDate()              | =SetDate()              | =SetDate()              | =SetDate()

具有默认格式的日期(Col A):

日期格式

结果:

结果

我可以知道为什么Excel将System Date Format MM/dd/yyyy更改为m/d/yyyy ,有没有办法解决?

请尝试使用Application.Text

所以你的SetDate函数看起来像

Function SetDate() As String
    Dim rng As Range    
    Set rng = Application.Caller    
    SetDate = Application.Text(Now, rng.NumberFormat)    
    Set rng = Nothing
End Function

我对Format函数的体验是它不完整。

如何设置功能可能会出现问题。 修改了它们,这是我的结果。

公式设置:

式

结果:

结果

修改功能:

Function RetrieveNumberFormat(rng As Range) As String
    Application.Volatile
    RetrieveNumberFormat = rng.NumberFormat
End Function

Function SetDate(rng As Range) As String
    Application.Volatile
    SetDate = Format(Now, rng.NumberFormat)
End Function

请查看这是否适用于您。

我不确定它是否足以解决我的问题,但随时评论或加强这一点。

我遇到的问题似乎是excel会将date formats that begin with (*)保存为m/d/yyyy ,这是美国语言环境的默认格式(嗯,Excel是由美国公司创建的),而不是实际的日期格式。

当我们直接在excel中输入值时它工作正常,excel会自动更改日期格式,但是,当我使用VBA输出时,这可能会产生问题,尤其是在使用autofilter

我有增强SetDate功能:

Function SetDate(refCell As Range) As String
    If refCell.NumberFormat = "m/d/yyyy" And refCell.Text = Format(refCell.Value, "Short Date") Then
        SetDate = Format(Now, "Short Date")
    Else
        SetDate = Format(Now, refCell.NumberFormat)
    End If
End Function

但是,使用日期格式时,此方法仍然存在问题: dd-MMM-yyyy ,excel将显示为dd-MM-yyyy

DD-MMM-YYYY

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM