Я получаю сообщение об ошибке функции в VBA?


1

У меня есть несколько функций в листе Excel для объектов, которые я хочу использовать в одной из моих форм. Ошибка "Требуется объект" Есть идеи, что мне нужно?

Microsoft Excel Object:
    Public sub doThisFunction()
        msgbox("hello")
    End Sub

Forms:
    Call Sheets("Sheet1").doThisFunction

Ответы:


2

SheetsГлобальная коллекция действительно со ссылкой на в активной книге . Избегайте неявных ссылок!

Рабочие листы имеют (name)свойство. Если вы не изменили его, то к объекту, на который указывает ссылка, Sheets("Sheet1")можно получить прямой доступ с помощью Sheet1идентификатора - при условии, что это так, это сработает:

Sheet1.doThisFunction

Также обратите внимание, что ThisWorkbook.Sheetsколлекция содержит диаграммы и рабочие листы. Вы , как правило , будет выглядеть на листе в ThisWorkbook.Worksheetsколлекции.


Эта строка также является проблемой:

MsgBox("hello")

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

MsgBox "hello"

Когда вы вызываете функцию, они вам нужны:

result = MsgBox("works?", vbYesNo)

Оборачивая аргументы процедуры в круглые скобки, вы передаете аргументы ByValпринудительно, заставляя VBA оценить значение того, что вы ему даете.

Например:

Sub DoSomething(ByRef foo As Object)
    'foo is passed by reference
End Sub

Sub Foobar()
    DoSomething (ThisWorkbook) 'ThisWorkbook is force-passed by value
End Sub

0

Callявляется устаревшим и избыточным оператором, вы можете просто удалить Callключевое слово ...

Если ваш вызов msgbox не возвращает значение, вы можете опустить скобки.

И чтобы быть уверенным, что вы работаете с правильным листом, попробуйте использовать кодовое имя листа, которое, как я полагаю, у вас есть, Sheet1но вам нужно будет скорректировать код, если вы назвали его как-то иначе.

Microsoft Excel Object:
'This needs to be in Sheet1
    Public sub doThisFunction()
        msgbox "hello"
    End Sub

Forms:
    'This line needs to be in a `Sub` or `Function` block...
    Sheet1.doThisFunction

не работает. Я попробовал то же самое.
user590792

отредактировал мой ответ
ThunderFrame
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.