如何编写一个返回值被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