VBA Excel函数设置调用Cell.NumberFormat属性

VBA Excel函数设置调用Cell.NumberFormat属性,excel,vba,number-formatting,Excel,Vba,Number Formatting,我创建了这个函数,它可以将值放入单元格,但是设置.NumberFormat属性不起作用 Public Function NewYears(year As Integer) 'Determine the cell that called the function Dim rng As range Set rng = ThisWorkbook.Sheets("How-To").range(Application.Caller.Address) MsgBox rng.A

我创建了这个函数,它可以将值放入单元格,但是设置.NumberFormat属性不起作用

Public Function NewYears(year As Integer)
    'Determine the cell that called the function
    Dim rng As range
    Set rng = ThisWorkbook.Sheets("How-To").range(Application.Caller.Address)
    MsgBox rng.Address
    fxFormat = "[$" & holidayName & "]"
    NewYears = DateSerial(year, 1, 1)
    rng.NumberFormat = fxFormat  
End Function
更新以了解更多信息:

我将使用类似于=NewYears()的函数来返回日期

我会在任何假期都这样做。我想格式化仍然存储日期的字段,但是.NumberFormat属性有假日的名称


So=NewYears()将返回“01/01/2014”,但在工作表中它将显示为“NewYears”

函数只能返回值或操作注释,不能直接修改格式。

使用
工作表\u Change
事件:

Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Interior.ColorIndex = 39
    Target.NumberFormat = "mm/dd/yyyy" 
End Sub
将此代码放入
工作表(“如何”)
代码模块。修改为要格式化的任何颜色/等

当您最初在单元格中输入函数时,它将触发更改事件并执行此子例程

根据Gary的评论(如下),重新计算现有公式不会触发此事件

  • 你的工作表/书中有多少计算

  • 单元格是在特定排列的列中,还是无处不在,还是随机排列

    若第一个问题的答案是肯定的,那个么我不会建议使用易失性函数触发器,并没有人应该这样做。接下来要做的事情取决于第二个问题的答案


  • 你为什么不试试“条件格式”呢?虽然它可能有点贵。否则,如果年份单元格应位于有组织的列或单元格中,请确保其格式已准备就绪。。。。如果这些都不适用,如果您的工作表的结构/设计…

    我可以说,调用另一个具有范围的Sub,Sub可以操纵它吗?当然我会尝试一下,你可以调用sub来格式化单元格,但不能从UDF中调用。使用sub来格式化单元格。直接运行子函数,而不是从函数内部调用。有关此UDF限制的一个相当难看的解决方法,请参阅。我不相信函数计算会触发功\u更改,您需要一个计算事件宏来完成此操作。啊,我认为您是对的。我只是通过在单元格中输入函数来测试它,这当然会触发更改。在这种情况下,输入函数将首先设置数字格式。不确定这是否需要根据OP进行更改,但您@Gary's Student的评论非常好。我在我的原始帖子中添加了额外的信息-我认为有条件的会很困难,因为我的假期日期可能会经常更改(原因我无法很快解释)Kairan这绝对不是关于图纸设计/结构的信息。通常人们知道如何调用
    UDF
    …;-)