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(显示下拉箭头),您可以根据需要调整这些参数。

posted @ 2026-03-06 06:29  孤独的小苗  阅读(5)  评论(0)    收藏  举报