Excel 如何运行加载项';在打开或关闭任何已安装它们的工作簿时使用(xlam)?

Excel 如何运行加载项';在打开或关闭任何已安装它们的工作簿时使用(xlam)?,excel,vba,excel-addins,Excel,Vba,Excel Addins,我需要创建两个“被动”宏,它们只有在满足工作簿中的特定条件(特定单元格中的值)时才能工作 一个宏应在工作簿打开时运行,另一个宏应在关闭时运行 因此,我创建了一个xlam,它进行格式化(创建报告),其中一个非常隐藏的选项卡输入应该触发“被动”宏的值 我尝试将代码嵌入“ThisWorkbook”对象中的CREATEREPORT xlam中。但它什么也没做,因为它试图在xlam上运行。我已经在测试工作簿上单独测试了这些代码,因为所有代码都嵌入到这个“测试”文件中,所以所有代码都能正确运行 我之所以需要

我需要创建两个“被动”宏,它们只有在满足工作簿中的特定条件(特定单元格中的值)时才能工作

一个宏应在工作簿打开时运行,另一个宏应在关闭时运行

因此,我创建了一个xlam,它进行格式化(创建报告),其中一个非常隐藏的选项卡输入应该触发“被动”宏的值

我尝试将代码嵌入“ThisWorkbook”对象中的CREATEREPORT xlam中。但它什么也没做,因为它试图在xlam上运行。我已经在测试工作簿上单独测试了这些代码,因为所有代码都嵌入到这个“测试”文件中,所以所有代码都能正确运行

我之所以需要它是xlam或任何类似的东西,是因为它将被其他用户和数百个不同的文件使用

我用于这两个方面的代码如下:

Private Sub Workbook_Open()
If DoesSheetExists("SettingsTab") Then

    If Worksheets("SettingsTab").Range("G2").Value = "x" Then   

        'Prevent Computer Screen from running
        Application.ScreenUpdating = False

        OpenSheets:

        For Each ws In Worksheets

            If ws.Name = "Welcome" Then
                'Skip
            Elseif ws.Name = "Access" Then
                'Skip
            Elseif ws.Name = "SettingsTab" Then
                'Skip
            Else

                Application.Worksheets(ws.Name).Visible = True

            End If

        Worksheets(1).Select


        Next ws
    End If

    End If

    End Sub

免责声明:代码被删减,仅显示其主要思想,因此如果有任何错误,请忽略

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet

If DoesSheetExists("SettingsTab") Then

    If Worksheets("SettingsTab").Range("G2").Value = "x" Then         

        'Prevent Computer Screen from running
        Application.ScreenUpdating = False

        'On closing report we hide all tabs except the welcome screen.
        'Access tab is hidden normally and while all others are set to very hidden mode.

        For Each ws In Worksheets

            If ws.Name = "Welcome" Then
                'Skip
            Else

                If ws.Name = "Access" Then
                    Application.Worksheets(ws.Name).Visible = xlHidden
                Else
                    Application.Worksheets(ws.Name).Visible = xlVeryHidden
                End If

            End If

        Next ws


        Application.Worksheets("Welcome").Select

        'Allow Computer Screen to refresh
        Application.ScreenUpdating = True       
     End If
   End If 

  End Sub

打开的那个看起来像这样:

Private Sub Workbook_Open()
If DoesSheetExists("SettingsTab") Then

    If Worksheets("SettingsTab").Range("G2").Value = "x" Then   

        'Prevent Computer Screen from running
        Application.ScreenUpdating = False

        OpenSheets:

        For Each ws In Worksheets

            If ws.Name = "Welcome" Then
                'Skip
            Elseif ws.Name = "Access" Then
                'Skip
            Elseif ws.Name = "SettingsTab" Then
                'Skip
            Else

                Application.Worksheets(ws.Name).Visible = True

            End If

        Worksheets(1).Select


        Next ws
    End If

    End If

    End Sub


所以我的问题是,实现我的两个“被动宏”的正确方法是什么?

使用。你能详细说明一下吗?我不是vba方面的专家,所以这对我来说是新的。我编辑了我的评论作为文档的链接。所以我一直在跟踪文档并复制一个类似的测试(但我的在最后显示了一个MSgBox)。然后我为这个测试创建了一个xlam,并将它作为快速访问中的一个按钮添加到excel中。因此,如果我点击图标,当我关闭时,它会显示消息。这里的问题是,我需要它一直运行,而不仅仅是当我点击它时。是否有任何具体的我应该输入为这种情况下?你能用你现在尝试的代码你的问题吗?