我想编写一个用户定义的函数(在工作簿的模块中定义),它接受一系列单元格并为 next 单元格生成值。它看起来像这样:
Function doStuff(ByRef input As Range) As Integer
Dim columnCount As Integer
Dim nextCell As Range
columnCount = input.Columns.Count
' nextCell is 2 cells away on the right of the last cell on the first row of input
Set nextCell = input.Cells(1, columnCount).Offset(0, 2)
nextCell.Value = "doStuff"
doStuff = columnCount
End Function
在单元格A2中,如果我使用公式= doStuff(A1),我希望A2 = 1,A3 =“doStuff”。不知何故,我总是得到错误"Application-defined or object-defined error"
到了nextCell.Value = "doStuff"
行。我是正确地做到了还是有解决方法?谢谢。
答案 0 :(得分:2)
从工作表中,函数只能返回值(以及其他一些东西)。也就是说,它们只能更改调用它们的Range的Value属性。它们不能更改该Range的任何其他属性,任何其他Range的任何属性,也不能更改Worksheet,Workbook或Application对象的任何属性。
您可以使用更改事件来检测何时输入该公式,如此
Function doStuff(ByRef rInput As Range) As Long
doStuff = rInput.Columns.Count
End Function
并在工作表的类模块中
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.HasFormula Then
If LCase(Target.Formula) Like "=dostuff(*" Then
Target.Cells(1, Target.DirectPrecedents(1).Value).Offset(0, 2).Value = "do stuff"
End If
End If
End Sub
我不确定这种逻辑是否正确,因为我不太明白你想写文字的地方,但我相信你可以把这部分弄清楚。