1

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

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

Forms:
    Call Sheets("Sheet1").doThisFunction

2 ответа2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .