excel - VBA 向多个工作表添加验证
问题描述
我确定有更好的方法来写这个吗?基本上我只想允许数据范围的数值。该工作簿有多个工作表,因此我只希望代码在工作表名称 WIP 和 HP 上工作。代码工作但我觉得我在重复自己。
sub Validation()
Sheets("AKL WIP").Activate
Range("J9", Range("J91").End(xlDown).End(xlToRight)).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=ISNUMBER(J9)"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "Data Type Error"
.InputMessage = ""
.ErrorMessage = "Only Numbers Are Allowed"
.ShowInput = True
.ShowError = True
End With
Sheets("AKL HP").Activate
Range("J9", Range("J91").End(xlDown).End(xlToRight)).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=ISNUMBER(J9)"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "Data Type Error"
.InputMessage = ""
.ErrorMessage = "Only Numbers Are Allowed"
.ShowInput = True
.ShowError = True
End With
End Sub
解决方案
只是不要使用Activate
- 而是使用 Worksheet 对象
就像是
Sub Validation()
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ActiveWorkbook ' or ThisWorkbook
For Each ws In wb.Worksheets
Select Case ws.Name
Case "AKL WIP", "AKL HP"
With ws.Range("J9", ws.Range("J91").End(xlDown).End(xlToRight)).Validation
.Delete
.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=ISNUMBER(J9)"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "Data Type Error"
.InputMessage = ""
.ErrorMessage = "Only Numbers Are Allowed"
.ShowInput = True
.ShowError = True
End With
End Select
Next
End Sub
推荐阅读
- c# - GridView UWP 高度问题中的 GridView
- arrays - 将数组压缩到小于 45000 字节
- python - Python Tkinter 用相同的文本销毁所选按钮旁边的所有按钮
- vb.net - 如何从 VB.NET 中的 2 个文本文件中读取特定行
- keras - MobileNetV2 的 Keras 和 TensorFlow Hub 版本的区别
- javascript - JQuery POST 到 wordpress PHP 插件执行
- angular - 如何将搜索栏放在 SplitButton 列表中
- java - java中观察者设计中的一个复杂问题的设计解决方案
- javascript - 如何使用 React 创建带有输入值的卡片列表?
- python - Python代码片段需要很长时间才能运行..如何提高效率?