Функция как вариант в цикле for возвращает «Требуется объект» Ошибка

Я пытаюсь сделать ячейку 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), все работает без ошибок.

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вам абсолютно необходимо использовать эту функцию для этого, то вот как:

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

Полезный; к вашему сведению, опубликованы дополнительные общие подсказки, чтобы пролить свет на проблемы ОП +:) @MGonet

T.M. 20.07.2024 20:50
Ответ принят как подходящий

1) Функция предназначена для возврата результата функции; кроме того, функция «может принимать аргументы, выполнять серию операторов и даже изменять значения своих аргументов» — ср. Оператор функции.

Используя Debug.Print cellv(j, 1), ваша функция (в том виде, в каком она закодирована) возвращает значение ячейки (предварительно определенное переданными аргументами строки/столбца) в качестве результата функции, тогда как кодирование Debug.Print cellv(j, 1) = "aa" проверит, равен ли результат функции «аа», и запишет значение True или False.

2) Результат функции, состоящий из значения ячейки, не предназначен для получения внешнего присвоения значения, как, например, через cellv(j, 1) = "aa". В вашем случае вы получаете ошибку времени выполнения 424 «Требуется объект».

  • Однако если вы хотите присвоить значения диапазону, вы можете предпочесть процедуру Sub или если вы хотите придерживаться своей функции, установите ее в память как диапазон, как в сообщении @MGonet.

Другие вопросы по теме