1

如果函数为假(如硬编码答案),我想将函数值作为粘贴特殊值返回。任何人都可以帮助我吗?我认为使用函数而不是 sub 更容易,因为我必须对相当大的数据集执行此操作。

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

感谢您的时间!

4

2 回答 2

1

在标准模块中输入:

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

并在工作表代码区域中输入:

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

“冻结”条件为真时。该函数向事件宏发出信号。事件宏看到信号并冻结包含函数的单元格。

于 2014-12-22T19:53:57.237 回答
1

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
于 2014-12-22T20:02:47.727 回答