В пользовательской функции Excel, как редактировать значение следующей ячейки - PullRequest
3 голосов
/ 05 июля 2011

Я хочу написать пользовательскую функцию (определенную в модуле рабочей книги), которая принимает диапазон ячеек и генерирует значение для следующей ячейки.Это выглядит так:

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 Ответ

2 голосов
/ 05 июля 2011

Из таблицы функции могут возвращать только значения (и некоторые другие вещи). То есть они могут изменять только свойство Value диапазона, из которого они вызваны. Они не могут изменять любое другое свойство этого Диапазона, любое свойство любого другого Диапазона или любое свойство объектов Рабочего листа, Рабочей книги или Приложения.

Вы можете использовать событие изменения, чтобы определить, когда вводится эта формула, например:

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

Я не уверен, что эта логика верна, потому что я не мог понять, где вы хотели написать текст, но я уверен, что вы можете понять эту часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...