2010-06-18 41 views
2

我正在使用CDate将格式为字符串的特定日期转换为Excel日期类型。我为这种转换写了一个小UDF;但是,当我将该函数作为内嵌函数运行时,它将返回一个数字,并将调用单元的默认格式设置为数字类型。当我手动将其转换为日期类型时,Excel将显示正确的日期条目。VBA中的CDate函数的问题

所以,我需要知道是否有方法通过我的日期转换宏将调用单元格的默认格式设置为日期类型。否则,用户必须手动更改每个单元格的格式。

e.g

Function Test() 
    Test = CDate("2010/12/23") 
End Function 

回答

1

呼叫单元通过Application.ThisCell暴露但是你将不得不为Excel UDF不能修改一个单元的物理特性,手动前格式化/电话后。

1

也许你可以在单元格输入后运行一些东西?

Dim c As range 
For Each c In ActiveSheet.UsedRange.Cells 
    ''Case sensitive 
    If c.Formula = "=test()" Then 
     c.NumberFormat = "d/mm/yyy" 
    End If 
Next 
0

这听起来像你想要做的实际上是一个过程分为两个部分:在一个单元格的值(或单元格区域)转换为日期,然后显示它作为一个日期,而不是简单地将看起来像日期的文本值转换为日期值。

如果是这样的话,那么我建议修改Remou的建议像这样(使用UsedRange可以是在含有大量数据的工作表有问题的):

Dim c As Range 
For Each c In Selection.Cells 
    c.Value = CDate(c.Value) 
    c.NumberFormat = "m/d/yyyy" 
Next c 

用户将然后需要选择小区应该应用格式并运行宏;这听起来好像你不希望发生这种情况,但我不确定这是可能的。

根据您希望如何使用宏,您可以添加其他检查:例如,您可以将格式仅应用于当前格式为文本(c.Value <> "" and c.NumberFormat = "@")的非空白单元格。

0

如果以字符串形式返回数据并采用Excel自动转换为日期的格式,则可以使单元格格式正确。

Function Test() As String 
    Test = Format(DateValue("2010/12/23"), "mm/dd/yyyy") 
End Function 

这适用于美国Excel,但如果你需要它是语言不可知的,我认为你会有问题。