在VBA中,工作簿对象可以引用在其工作表中编写的方法吗?

时间:2017-09-19 17:39:58

标签: excel vba excel-vba

修改以提供更多信息。

基本问题:

工作簿是否可以访问在VBA中的一个工作表中编写的方法?

真实世界的原因:

我需要在工作簿启动时运行一个方法(Workbook_Open()事件)但是,该方法有一些要求使模块不可行:

  1. 需要维持状态
  2. 需要存储数据
  3. 需要从工作簿和所述工作簿中的工作表中引用
  4. Psuedocode示例:

    myWorkbook

    Private Sub Workbook_Open()
        Call myWorkbook.Sheet("worksheet1").helloWorld
    End Sub
    

    worksheet1

    Public Sub printHelloWorld()
    
        'Store "Hello World" so we can use later, this method needs to maintain state
        Dim helloWorld As String
        Set helloWorld = "Hello World"
    
        MsgBox(helloWorld)
    End Sub
    

3 个答案:

答案 0 :(得分:0)

我会把下面的代码放在一个模块中

Public Sub printHelloWorld()
    MsgBox("Hello World")
End Sub

myWorkBook中的代码看起来像

Private Sub Workbook_Open()
    printHelloWorld
End Sub

答案 1 :(得分:0)

是的,这可以做到。以下两种方法都可以。

Sub TestWithExplicitWorksheet()
    wsTest.TestMessage
End Sub

Sub TestWithWorksheetsCollection()
    ThisWorkbook.Worksheets("Sheet1").TestMessage
End Sub

wsTest代码:

Sub TestMessage()
    Debug.Print "Success"
End Sub

工作表或多或少是预先声明的类模块。因此,如果您可以使用类来完成它,您应该可以使用工作表来完成它。由于Workbook对象的Worksheets集合返回(如果找到)一个Worksheet对象,您可以在此返回的对象上调用该方法(如果它是正确的对象并包含被调用的子对象)。

答案 2 :(得分:0)

是的,您可以使用工作表CodeName(您也可以在工作表对象属性中更改它):

Private Sub Workbook_Open()
    Sheet1.printHelloWorld()        ' full name is VBAProject.Sheet1.printHelloWorld()
End Sub