VBA实现赋值加重置数据有效性为序列
以下VBA代码将实现您的要求:遍历所有名为“3月6日”到“3月31日”的工作表,在每个工作表中设置L111和L112的值,并为L2:L52区域添加数据有效性(序列),来源为L102:L112。
Sub SetSheetsData()
Dim ws As Worksheet
Dim i As Integer
Dim sheetName As String
' 循环3月6日到3月31日
For i = 6 To 31
sheetName = "3月" & i & "日"
' 尝试获取工作表,如果存在则进行操作
On Error Resume Next
Set ws = ThisWorkbook.Worksheets(sheetName)
On Error GoTo 0
If Not ws Is Nothing Then
With ws
' 1. 设置L111和L112的值
.Range("L111").Value = "冲版机卡版"
.Range("L112").Value = "弯版机弯版错误"
' 2. 设置L2:L52的数据有效性为序列,来源为L102:L112
With .Range("L2:L52").Validation
.Delete ' 删除已有的有效性
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="=$L$102:$L$112"
.IgnoreBlank = True ' 允许空值(可选)
.InCellDropdown = True ' 显示下拉箭头
End With
End With
End If
Set ws = Nothing ' 重置变量,准备下一个循环
Next i
MsgBox "操作完成!"
End Sub
代码说明
遍历日期:从6到31循环,构造工作表名称(如“3月6日”)。
检查工作表是否存在:使用On Error Resume Next尝试获取工作表,若存在则执行后续操作。
赋值单元格:将L111和L112分别设置为指定文本。
设置数据有效性:
先删除L2:L52区域已有的数据有效性。
添加序列类型,来源使用绝对引用$L$102:$L$112。
设置IgnoreBlank = True(允许用户输入空值)和InCellDropdown = True(显示下拉箭头),您可以根据需要调整这些参数。

浙公网安备 33010602011771号