Excel VBA报错‘Sub or Function not defined’:工作表显隐功能异常求助
Excel VBA 解决"Sub or Function not defined"错误及工作表显示隐藏问题
错误原因分析
- 缺少
ShowHide过程定义:你调用了ShowHide自定义过程,但代码中未实现该子程序,这是触发"Sub or Function not defined"错误的直接原因。 - 工作表引用语法错误:
Worksheets(Sheet3)写法错误,直接使用工作表对象名(如Sheet3)即可,或用带引号的工作表名称Worksheets("Sheet3")。 - 单元格地址未加引号:
Range(C1)会被VBA识别为变量,正确写法是Range("C1")。
修正后的完整代码
将以下代码替换Sheet3中的原有代码:
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅当C1单元格被修改时执行后续逻辑 If Intersect(Me.Range("C1"), Target) Is Nothing Then Exit Sub Select Case Me.Range("C1").Value Case "INTERIM" ShowHide False Sheet1.Visible = True Sheet3.Visible = True Case "ESTIMATED_BUDGET" ShowHide False Sheet5.Visible = True Sheet3.Visible = True Case "Final" ShowHide False Sheet6.Visible = True Sheet3.Visible = True Case "ALL" ShowHide True End Select End Sub ' 实现ShowHide过程:控制所有工作表的显示/隐藏状态 Private Sub ShowHide(isShowAll As Boolean) Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets ws.Visible = isShowAll Next ws End Sub
代码说明
ShowHide过程:遍历工作簿内所有工作表,根据传入的布尔值批量设置显示或隐藏状态。Select Case优化逻辑:替代多重If Else,让代码结构更清晰易维护。- 简化引用:用
Me.Range("C1")代替Sheet3.Range("C1"),因代码存于Sheet3模块,Me直接代表当前工作表。 - 统一语法规范:修正了工作表、单元格的引用错误,避免VBA识别歧义。
内容的提问来源于stack exchange,提问作者bitroal
相关产品推荐
相关产品推荐

