Я пытаюсь сделать ячейку A1, A2, A3 = аа
используя код ниже, но получая ошибку «Требуется объект».
Public Function cellv(ByVal row As Variant, col As Integer) As Variant
cellv = ThisWorkbook.Sheets("Tree").Cells(row, col).Value
End Function
Public Sub testz()
Dim j
For j = 1 To 3
cellv(j, 1) = "aa"
Next j
End Sub
Если я использую Debug.Print cellv(j,1)
, все работает без ошибок.
Если вам абсолютно необходимо использовать эту функцию для этого, то вот как:
Public Function cellv(ByVal row As Variant, col As Integer) As Range
Set cellv = ThisWorkbook.Sheets("Tree").Cells(row, col)
End Function
Более естественный способ:
Public Sub testz2()
Dim cellv As Range
Set cellv = ThisWorkbook.Sheets("Tree").Range("A1:A3")
cellv.Value = "aa"
End Sub
1)
Функция предназначена для возврата результата функции; кроме того, функция «может принимать аргументы, выполнять серию операторов и даже изменять значения своих аргументов» — ср. Оператор функции.
Используя Debug.Print cellv(j, 1)
, ваша функция (в том виде, в каком она закодирована) возвращает значение ячейки (предварительно определенное переданными аргументами строки/столбца) в качестве результата функции, тогда как кодирование Debug.Print cellv(j, 1) = "aa"
проверит, равен ли результат функции «аа», и запишет значение True
или False
.
2)
Результат функции, состоящий из значения ячейки, не предназначен для получения внешнего присвоения значения, как, например, через cellv(j, 1) = "aa"
. В вашем случае вы получаете ошибку времени выполнения 424 «Требуется объект».
Sub
или если вы хотите придерживаться своей функции, установите ее в память как диапазон, как в сообщении @MGonet.
Полезный; к вашему сведению, опубликованы дополнительные общие подсказки, чтобы пролить свет на проблемы ОП +:) @MGonet