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

21 浏览
0 Comments

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

我希望在打开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 宏
'
'
    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 宏
'
'
    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 Comments

问题原因:想要在打开Excel文件时自动运行宏,但不清楚如何实现。

解决方法:最简单的方法是使用默认的模块"ThisWorkbook",该模块在打开Excel文件时会执行。可以在VBA项目资源管理器中找到它。只需将要执行的子程序复制到该空间即可。具体步骤可以在以下链接中找到详细说明:[https://support.office.com/en-us/article/automatically-run-a-macro-when-opening-a-workbook-1e55959b-e077-4c88-a696-c3017600db44](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

这样,实际的子程序可以保留在另一个模块中。

以上是解决方法,希望对您有帮助。请接受并投票支持有帮助的答案(我们都希望获得更多声望 😉 )。

0
0 Comments

问题的原因是使用了错误的事件触发器。正确的事件触发器应该是Workbook_Open(),而不是Worksheet_Change(ByVal Target As Range)。此外,代码应该存储在ThisWorkbook下,而不是单独的模块或工作表中。

以下是解决方案的代码示例:

Private Sub Workbook_Open()
    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

此外,可以在以下链接找到更多帮助:https://support.office.com/en-us/article/automatically-run-a-macro-when-opening-a-workbook-1e55959b-e077-4c88-a696-c3017600db44

请记得投票/接受答案,以便其他人知道您的问题已解决,并帮助用户获得声望。

0