excel - 在公式单元格上运行 VBA 集
问题描述
我有一些 VBA 代码(如下)来隐藏和显示基于单元格值的行,当单元格被单击然后退出或手动完成时,VBA 工作但是单元格中有一个公式我需要基于 VBA我已经尝试了几种方法,但我没有取得任何成功,也无法让它刷新和运行 VBA。我真的不希望或不需要让最终用户单击任何不必要的字段 - 任何建议将不胜感激。
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Activate
Application.ScreenUpdating = False
On Error Resume Next
If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
Select Case Target.Value
Case Is = "0":
Rows("27:64").EntireRow.Hidden = True
End Select
End If
If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
Select Case Target.Value
Case Is = "1":
Rows("27:29").EntireRow.Hidden = False
Rows("31:42").EntireRow.Hidden = False
Rows("52:64").EntireRow.Hidden = False
Rows("43:45").EntireRow.Hidden = True
Rows("46:51").EntireRow.Hidden = True
Rows("30:30").EntireRow.Hidden = True
End Select
If
On Error Resume Next
If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
Select Case Target.Value
Case Is = "2":
Rows("27:29").EntireRow.Hidden = False
Rows("31:45").EntireRow.Hidden = False
Rows("52:64").EntireRow.Hidden = False
Rows("46:51").EntireRow.Hidden = True
Rows("30:30").EntireRow.Hidden = True
End Select
End If
On Error Resume Next
If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
Select Case Target.Value
Case Is = "3":
Rows("27:31").EntireRow.Hidden = False
Rows("31:42").EntireRow.Hidden = False
Rows("46:51").EntireRow.Hidden = False
Rows("43:45").EntireRow.Hidden = True
End Select
End If
On Error Resume Next
If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
Select Case Target.Value
Case Is = "4":
Rows("27:31").EntireRow.Hidden = False
Rows("32:45").EntireRow.Hidden = True
Rows("52:64").EntireRow.Hidden = True
Rows("46:51").EntireRow.Hidden = False
End Select
End If
On Error Resume Next
If Not Application.Intersect(Range("G20"), Range(Target.Address)) Is Nothing Then
Select Case Target.Value
Case Is = "5":
Rows("27:64").EntireRow.Hidden = False
End Select
End If
Application.ScreenUpdating = True
End Sub
解决方案
我假设您正在检查单元格G20
以隐藏/取消隐藏行。所以我们要这样做:
首先为此更改工作表对象中的代码:
Option Explicit
Private Sub Worksheet_Calculate()
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
HideRows Me.Range("G20"), Me
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
这将调用另一个过程,该过程将包含在这样的模块中:
Option Explicit
Sub HideRows(CellValue As Long, ws As Worksheet)
With ws
Select Case CellValue
Case 0
.Rows("27:64").EntireRow.Hidden = True
Case 1
.Rows("27:29").EntireRow.Hidden = False
.Rows("31:42").EntireRow.Hidden = False
.Rows("52:64").EntireRow.Hidden = False
.Rows("43:45").EntireRow.Hidden = True
.Rows("46:51").EntireRow.Hidden = True
.Rows("30:30").EntireRow.Hidden = True
Case 2
.Rows("27:29").EntireRow.Hidden = False
.Rows("31:45").EntireRow.Hidden = False
.Rows("52:64").EntireRow.Hidden = False
.Rows("46:51").EntireRow.Hidden = True
.Rows("30:30").EntireRow.Hidden = True
Case 3
.Rows("27:31").EntireRow.Hidden = False
.Rows("31:42").EntireRow.Hidden = False
.Rows("46:51").EntireRow.Hidden = False
.Rows("43:45").EntireRow.Hidden = True
Case 4
.Rows("27:31").EntireRow.Hidden = False
.Rows("32:45").EntireRow.Hidden = True
.Rows("52:64").EntireRow.Hidden = True
.Rows("46:51").EntireRow.Hidden = False
Case 5
.Rows("27:64").EntireRow.Hidden = False
End Select
End With
End Sub
这样,如果以相同的方式构建多个工作表,您可以将代码用于多个工作表,您只需将代码从工作表对象复制到其他工作表,它将HideRows
根据值隐藏/取消隐藏行G20
您可以在每张纸上更改目标的单元格。
至于你的使用,Select Case
你可以看到你只需要一个与你所有的案例为价值。
推荐阅读
- java - 线程“main”中的异常 java.lang.NullPointerException selenium maven junit
- javascript - 无论如何运行Node JS PATCH请求
- python - numpy expand_dim() 中的 (13027,) 和 (13027,1) 有什么区别
- r - 将 db 文件加载到 R 中耗尽内存的好技巧是什么?
- python - 如何 - 将列表中的每个项目复制到另一个数据库(RPA - Python)
- excel - 尝试将(仅)唯一值从列传递到 VBA 中的字典。验证未发生。我错过了什么?
- javascript - 如何将日期字符串转换为日期
- javascript - 有没有一种从缓存中动态更新站点数据的好方法?
- pyspark - 如何使用 ETL (AWS Glue) 聚合数据,以便我们可以使用 Athena 通过特定属性仅选择一部分数据
- javascript - 异步 Javascript 队列