我想在打开Excel文件时自动运行宏

时间:2019-09-13 09:52:16

标签: excel vba autorun

我想在打开Excel工作表时自动运行此私人子。

我尝试使用Private Sub Workbook_Open()方法,但由于第一个私有子目录没有名称,因此无法使用。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet: Set ws = Sheets("Budget- Reporting")
    If Range("W6").Value = 0 Then
        HideFG
    Else
        HideF
    End If
End Sub

Sub HideF()
'
' HideF Macro
'

'
    For i = 1 To ActiveSheet.Shapes.Count
    ActiveSheet.Shapes(i).Visible = msoTrue
    Next i
    ActiveSheet.Shapes.Range(Array("F")).Visible = msoFalse
    Application.CommandBars("Selection").Visible = False
End Sub

Sub HideFG()
'
' HideFG Macro
'

'
    For i = 1 To ActiveSheet.Shapes.Count
    ActiveSheet.Shapes(i).Visible = msoTrue
    Next i
    ActiveSheet.Shapes.Range(Array("FG")).Visible = msoFalse
    Application.CommandBars("Selection").Visible = False
End Sub

我希望它在打开excel文件时自动检查W16单元格,并继续执行HideF宏或HideFG宏。当前,打开文件后在单元格上实际键入一次后,这两个宏就会运行。

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用默认模块“ ThisWorkbook”,该模块在打开excel文件时执行。您可以在窗口左侧的VBA Project Explorer中找到它。 只需将要执行的子项复制到该空间即可。

它在这里详细解释: https://support.office.com/en-us/article/automatically-run-a-macro-when-opening-a-workbook-1e55959b-e077-4c88-a696-c3017600db44

如果您的用例有必要,这可以帮助您调用一个私有子程序:

Private Sub PrivateCallDemo()
'Module2
Application.Run "Module1.Worksheet_Change"
End Sub

这样,您的实际Sub可以留在另一个模块中。

答案 1 :(得分:0)

您有一些问题。首先,您不需要Worksheet_Change(ByVal Target As Range) ,因为这是针对工作簿更改触发的事件,所以您需要Workbook_Open()。该信息存储在ThisWorkbook下,而不是单独的模块/工作表中。

这是工作代码,我注释掉了您的ws声明以进行测试。

Private Sub Workbook_Open()
'Dim ws As Worksheet: Set ws = Sheets("Budget- Reporting")
    If Range("W6").Value = 0 Then
        HideFG
    Else
        HideF
    End If
End Sub

Sub HideF()
 MsgBox "HideF"
End Sub

Sub HideFG()
 MsgBox "HideFG"
End Sub

这是我的编辑器的屏幕截图。

enter image description here

G.M。在这里也找到了很好的资源-> https://support.office.com/en-us/article/automatically-run-a-macro-when-opening-a-workbook-1e55959b-e077-4c88-a696-c3017600db44

我只是将模块放在屏幕快照的同一位置,但是如果您希望将模块与Call HideFG事件分开存储,那么您可以将它们分别放置,并仍然使用workbook_open方法会想要的。