如何编写一个返回值被Excel识别为date的VBA函数?

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

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

然后我在一个单元格中使用该函数,如this =someDate() 。 但是该值显示为一个浮点数。
但是,如果我这样做=now() ,单元格值显示为预期的date。

如何编写一个返回date的函数,Excel自动将该值作为date来识别?

编辑以显示OSdate格式的可能处理

您可以保留原有的function,并在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 

不可能AFAIK,只要编写一些代码,使Excel将该单元格解释为date,

 Selection.NumberFormat = "m/d/yyyy" 

虽然我确定你知道:)

其他强制date格式的方法是将单元格作为操作数也是date的公式的结果,所以您可以将0格式化为date并添加到您的单元格,这将是一个date,虽然这是非常糟糕的大多数Excel程序员都会使用某些VBA来格式化单元格。

Excel将date存储为数字,所以您所看到的是数字格式的date – 无论您尝试做什么,无论是在macros中还是输出到单元格,只需将其转换回您喜欢的date格式即可最后使用VBA的格式和Excel的TEXT。

希望这有助于TheSilkCode