我在工作表 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