如何编写一个VBA函数,其返回值被Excel识别为日期?

时间:2017-01-21 11:19:44

标签: excel vba excel-vba datetime

我在MS Excel 2002中编写了以下测试函数:

Function someDate() As Date
    someDate = Now()
End Function

然后我在单元格中使用该函数,如=someDate()。但该值显示为浮点数 但是,如果我执行此操作=now(),则单元格值将按预期显示为日期。

如何编写返回日期的函数,Excel会自动将该值识别为日期?

3 个答案:

答案 0 :(得分:2)

已编辑以显示可能的操作系统日期格式

您可以按原样保留您的功能,并在ThisWorkbook代码窗格中添加此代码:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim cell As Range
    Dim dateSeparator As String

    dateSeparator = Application.International(xlDateSeparator) '<--| retrieve OS date separator
    For Each cell In Target
        If cell.Formula = "=someDate()" Then
            Select Case Application.International(xlDateOrder) '<--| query OS date format
                Case 0
                    cell.NumberFormat = "mm" & dateSeparator & "dd" & dateSeparator & "yyyy"
                Case 1
                    cell.NumberFormat = "dd" & dateSeparator & "mm" & dateSeparator & "yyyy"
                Case 2
                    cell.NumberFormat = "yyyy" & dateSeparator & "mm" & dateSeparator & "dd"
            End Select
        End If
    Next
End Sub

答案 1 :(得分:1)

不可能AFAIK,只需编写一些代码以使Excel将该单元格解释为日期,

Selection.NumberFormat = "m/d/yyyy"

虽然我确定你知道:)

强制日期格式的其他方法是使单元格成为公式的结果,其中操作数也是日期,因此您可以将0格式化为日期并添加到您的单元格中,它将是虽然这是一个很好的日期,但大多数Excel程序员都会使用某个VBA来格式化单元格。

答案 2 :(得分:0)

Excel将日期存储为数字,所以您看到的是数字格式的日期 - 在您尝试做的任何事情的最后,无论是在宏中还是输出到单元格,只需转换回到最后使用的格式为VBA和TEXT for Excel。

希望这有帮助, TheSilkCode