我在 vba 中收到调用函数错误?

我在 vba 中收到调用函数错误?

我在工作表 excel 对象中有一些函数,我想从我的一个表单中获取这些函数。错误是“需要对象”。知道我需要什么吗?

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

Forms:
    Call Sheets("Sheet1").doThisFunction

答案1

全球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

答案2

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

相关内容