VBA Excel验证:公式中IF语句的使用

fgw7neuy  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(150)

我正尝试在VBA中为验证列表创建Formula1字符串。我的目标是基于参数创建下拉列表。

如果我只想要A的东西,那么只有“一些东西”和“对象3”需要在下拉列表中。
同样,如果我只想为B个人的东西,那么只有“一些其他的东西”和“对象1”应该在下拉列表中。
我有麻烦 Package 这在我的头周围...这几乎可以肯定是一个“一行”,但它已经太久了,因为我最后做了一些VBA...
NB:真实的情况比这个例子要复杂得多。我不能改变东西的格式。

x8diyxa7

x8diyxa71#

为了在B:C列中放置或清除“x”时自动创建/修改列表验证单元格,请复制相应表单代码模块中的下一个代码。它将在“E2”中创建两个列表数据验证单元格,分别为“F2”:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lastR As Long
    lastR = Me.Range("A" & Me.rows.count).End(xlUp).Row
    
    If Not Intersect(Target, Me.Range("B2:C" & lastR)) Is Nothing Then
        If Me.Range("E1").Value = "" Then Me.Range("E1:F1").Value = Array("B Validation", "C Validation")
        Dim arrAC, arrRet, i As Long, k As Long
        
        arrAC = Me.Range("A2:C" & lastR).Value2
        ReDim arrRet(UBound(arrAC) - 1)
        For i = 1 To UBound(arrAC)
            If arrAC(i, Target.column) = "x" Then arrRet(k) = arrAC(i, 1): k = k + 1
        Next i
        If k > 0 Then
                ReDim Preserve arrRet(k - 1)
                With Me.cells(2, Target.column + 3).Validation
                  .Delete
                  .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                               Formula1:=Join(arrRet, ",")
                End With
        Else
                 Me.cells(2, Target.column + 3).Validation.Delete
        End If
    End If
End Sub

相关问题