长话短说,我试图让我的自定义函数增加公式条目(触发它的那个!)作为函数的一部分。这是一个提炼的例子:
Private Function heythere(blah As String)
extraBit = "title"
ActiveCell.Formula = Replace(ActiveCell.Formula, ")", "," & """" & extraBit & """" & ")")
End Function
基本上,extraBit
由UserForm ListBox定义,如果用户没有将其添加到公式中。有许多选项,根据条目的第一个参数动态加载到ListBox中。解释起来有点棘手,但如果公式中提供extraBit
则表示UserForm没有出现,结果是直接给出的。所以我想在定义extraBit
之后“修复”条目。基本上,在上面的示例中,=heythere(a1)
将变为=heythere(a1,"title")
。
这可能吗?我尝试创建一个单独的Private Sub来覆盖条目,但无济于事。提前感谢任何建议...
编辑:为了阐明它的工作方式,实际的UDF更像是这样,带有可选的辅助参数:
Private Function heythere2(blah As String, Optional extraBit As String)
If extraBit = "" Then
extraBit = "title"
ActiveCell.Formula = Replace(ActiveCell.Formula, ")", "," & """" & extraBit & """" & ")")
End If
End Function
答案 0 :(得分:2)
问题是excel不知道你打算用公式做什么,返回值无效。这将显示您遇到错误。如果这是一个UDF,你进入一个无限循环,因为每次单元格更改它再次运行代码。重新思考你的方法。
Public Function heythere(blah As String, Optional extraBit As String = "")
On Error Resume Next
Dim formulaText As String
formulaText = ActiveCell.Formula
If extraBit = "" Then
extraBit = "title"
End If
formulaText = Replace(formulaText, ")", "," & Chr(34) & extraBit & Chr(34) & ")")
ActiveCell.Formula = formulaText
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Function
因此,让我们更改您的公式位并使用工作表更改事件
'Lets set the text of the cell to the value of the extrabit
Public Function heythere(blah As String, Optional extraBit As String = "") As String
If extraBit = "" Then
extraBit = "title"
End If
heythere = extraBit
End Function
现在我们使用工作表更改的事件更新公式
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If InStr(1, Target.Formula, ",") > 0 Then
Else
On Error Resume Next
Dim formulaText As String
formulaText = Target.Formula
formulaText = Replace(formulaText, ")", "," & Chr(34) & Target.Value & Chr(34) & ")")
Target.Formula = formulaText
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End If
End Sub
Viola,公式更新了。 IMO这仍然是一个糟糕的方法,因为在你采取行动之前,你需要检查哪个公式在单元格中。