我想在打开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宏。当前,打开文件后在单元格上实际键入一次后,这两个宏就会运行。
答案 0 :(得分:0)
最简单的方法是使用默认模块“ ThisWorkbook”,该模块在打开excel文件时执行。您可以在窗口左侧的VBA Project Explorer中找到它。 只需将要执行的子项复制到该空间即可。
如果您的用例有必要,这可以帮助您调用一个私有子程序:
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
这是我的编辑器的屏幕截图。
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
方法会想要的。