VBA: Как изменить значение другой ячейки через функцию? - PullRequest
2 голосов
/ 02 октября 2010

Я новичок в Excel VBA.

Как изменить значение указанной ячейки с помощью определенной пользователем функции?Что не так с этим кодом:

Function Test(ByVal ACell As Range) As String
  ACell.Value = "This text is set by a function"
  Test := "Result"
End Function

Мое желание ... когда я набираю =Test(E6) в ячейке E1, Excel отобразит указанный текст в E6.

Ответы [ 4 ]

4 голосов
/ 02 октября 2010

VBA UDF может использоваться как функция массива для возврата результатов в несколько соседних ячеек.Введите формулу в E1 и E2 и нажмите Ctrl-Shift-Enter, чтобы создать формулу массива из нескольких ячеек.Ваш UDF будет выглядеть примерно так:

Public Function TestArray(rng As Range)
    Dim Ansa(1 To 2, 1 To 1) As Variant
    Ansa(1, 1) = "First answer"
    Ansa(2, 1) = "Second answer"
    TestArray = Ansa
End Function
3 голосов
/ 02 октября 2010

Excel VBA не позволит пользовательской функции изменять значение другой ячейки. Единственное, что разрешено делать UDF (с некоторыми незначительными исключениями), это возвращать значения в ячейки, из которых он вызывается.

0 голосов
/ 18 марта 2019

ДА, конечно, это возможно. Поместите этот код в Module1 редактора VBA:

Function Rectangle(A As Integer, B As Integer)
    Evaluate "Adjacent(" & Application.Caller.Offset(0, 1).Address(False, False) & "," & A & "," & B & ")"
    Rectangle = "Area:"
End Function

Private Sub Adjacent(CellToChange As Range, A As Integer, B As Integer)
    CellToChange = A * B
End Sub

Результат этого примера UDF возвращается в другую соседнюю ячейку. Пользовательская функция Rectangle вычисляет площадь прямоугольника на основе двух параметров A и B и возвращает результат в ячейку справа

Вы можете легко изменить этот пример функции. Работа выполняется секретной недокументированной функцией VBA Evaluate. Повеселись!

Это ссылка на ограничение UDF, установленное Microsoft. https://support.microsoft.com/en-us/help/170787/description-of-limitations-of-custom-functions-in-excel

0 голосов
/ 02 октября 2010

Почему бы тогда просто не набрать формулу в E6?Это логика Excel: поместите формулу туда, где вы хотите, чтобы результат появился.

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