在Excel用户自定义函数中,如何编辑下一个单元格的值

时间:2011-07-05 15:15:52

标签: excel vba excel-vba

我想编写一个用户定义的函数(在工作簿的模块中定义),它接受一系列单元格并为 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"行。我是正确地做到了还是有解决方法?谢谢。

1 个答案:

答案 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

我不确定这种逻辑是否正确,因为我不太明白你想写文字的地方,但我相信你可以把这部分弄清楚。