如果函数在VBA中为false,则Hardcode函数值

如果函数为false(如硬编码答案),我想返回函数值作为粘贴特殊值。 任何人都可以帮我吗? 我认为使用函数而不是子函数更容易,因为我必须这样做到相当大的数据集。

Function produktion(d2, sum1, sum2) Dim j As Integer j = Application.Sum(sum1) - Application.Sum(sum2) If d2 = Date Then produktion = j Else 'here hardcode the produktion = j forever like the paste special value 

感谢您的时间!

UDF不能直接修改工作表,它只能返回一个值。 有一些解决方法可以触发代码在UDF调用本身之外执行。

其中之一就是使用Evaluate调用修改表单的代码(另一个是使用工作表事件作为Gary的回答)

 Function produktion(d2, sum1, sum2) Dim j As Long j = Application.Sum(sum1) - Application.Sum(sum2) If d2 = Date Then produktion = j Else With Application.Caller 'here hardcode the produktion = j forever like the paste special value .Worksheet.Evaluate "HardCodeValue(""" & .Address & """)" End With End If End Function Sub HardCodeValue(rng As String) With Range(rng) .Value = .Value End With End Sub 

在标准模块中input:

 Public FreezeWho As String Public FreezeNow As Boolean Public Function produktion(d2 As Date, sum1 As Range, sum2 As Range) As Long Dim wf As WorksheetFunction, j As Long Set wf = Application.WorksheetFunction j = wf.Sum(sum1) - wf.Sum(sum2) produktion = j If d2 = Date Then FreezeWho = Application.Caller.Address FreezeNow = True End If End Function 

并在工作表代码区input:

 Private Sub Worksheet_Calculate() If FreezeNow Then Range(FreezeWho).Value = Range(FreezeWho).Value FreezeNow = False End If End Sub 

“冻结”条件为真时。 该函数发送事件macros信号。 事件macros看到信号并冻结包含该function的单元。