设置数据有效性其实可以不通过VBA代码就可以完成,用VBA代码去完成设置主要是为了保护有效性不被误删。有基础的同学会说我可以通过保护工作表的方式去保护有效性不被误删,我的回答:是的,但是通过VBA代码去规范会更好。
实现代码:
Sub SetDataValidation(ByVal RangeObj As Range, ByVal flag As String)
If flag = "y" Then
With RangeObj.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertWarning, Operator _
:=xlBetween, Formula1:="=商品!$A$2:$A$1048576"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "提示"
.ErrorTitle = "警告!"
.InputMessage = "修改条码的Status"
.ErrorMessage = "输入的数据非有效数据,是否确定输入内容?"
.IMEMode = xlIMEModeNoControl
.ShowInput = True
.ShowError = True
End With
End If
End Sub
Private Sub Worksheet_Activate()
Call SetDataValidation(Range(Cells(2, 1), Cells(1048576, 1)), "y")
End Sub
代码解析:
'把名为商品工作表中的A2到A1048576作为设置有效行数据的来源
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertWarning, Operator _
:=xlBetween, Formula1:="=商品!$A$2:$A$1048576"

'要在单元格范围为A2到A1048576单元格设置有效性
Call SetDataValidation(Range(Cells(2, 1), Cells(1048576, 1)), "y")