Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中,工作簿对象能否引用在其工作表中编写的方法?_Vba_Excel - Fatal编程技术网

在VBA中,工作簿对象能否引用在其工作表中编写的方法?

在VBA中,工作簿对象能否引用在其工作表中编写的方法?,vba,excel,Vba,Excel,编辑以提供更多信息 基本问题: 工作簿是否可以访问VBA中某个工作表中编写的方法 现实世界的原因: 我需要在工作簿启动时运行一个方法(工作簿_Open()事件),但是,该方法有一些要求,使模块不可行: 需要保持状态 需要存储数据 需要从工作簿和所述工作簿中的工作表中引用 Psuedocode示例: myWorkbook Private Sub Workbook_Open() Call myWorkbook.Sheet("worksheet1").helloWorld End Sub 工

编辑以提供更多信息

基本问题:

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

现实世界的原因:

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

  • 需要保持状态
  • 需要存储数据
  • 需要从工作簿和所述工作簿中的工作表中引用
  • Psuedocode示例:

    myWorkbook

    Private Sub Workbook_Open()
        Call myWorkbook.Sheet("worksheet1").helloWorld
    End Sub
    
    工作表1

    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
    

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

    Public Sub printHelloWorld()
        MsgBox("Hello World")
    End Sub
    
    我的工作簿中的代码如下所示

    Private Sub Workbook_Open()
        printHelloWorld
    End Sub
    

    是的,这是可以做到的。下面两个都很好

    Sub TestWithExplicitWorksheet()
        wsTest.TestMessage
    End Sub
    
    Sub TestWithWorksheetsCollection()
        ThisWorkbook.Worksheets("Sheet1").TestMessage
    End Sub
    
    wsTest代码:

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

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

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


    你试过了吗?你得到了什么?提示:
    工作簿
    没有
    工作表
    成员。尝试从IDE中发布代码,而不是在问题框中键入。是/否问题在这个网站上特别糟糕。你可以让应用程序变得简单一点。Run(“L:\Base\LCMSACRO \MaL1.xLSM!!宏名字”,“PARAM1”,“PARAM2”),通过@芬克的礼貌,我不认为这只是一个“是”/“没有”的问题。如果答案是肯定的,那么它将有一个“如何”的方面。实际提供的代码或多或少是伪代码,我的拼写错误
    Private Sub Workbook_Open()
        Sheet1.printHelloWorld()        ' full name is VBAProject.Sheet1.printHelloWorld()
    End Sub