如果函数为false(如硬编码答案),我想将函数值作为粘贴特殊值返回。有人可以帮我吗? 我认为使用函数而不是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
感谢您的时间!
答案 0 :(得分: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
当“冻结”条件为 True。时,该函数会向事件宏发出信号。事件宏看到信号并冻结包含该函数的单元格。
答案 1 :(得分: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