我在excel中创建了命名范围,范围的命名基于sheet2上的键值。
现在,我在另一个sheet1上创建了下拉列表,其公式公式为INDIRECT,再次基于sheet1上的键。如何将空白/特殊符号添加到下拉列表?我无法在工作表上的已排序项目之间添加空单元格。
工作表2:
excel - VBA-数据验证空白单元格-LMLPHP

我有2个基于MAT / AE列的命名范围,第一个是C2:C4的范围,下一个是C5:C6。

excel - VBA-数据验证空白单元格-LMLPHP

在这里有Sheet1,我使用数据验证,使用公式INDIRECT连接MAT1&AE11,并且我具有基于Sheet2范围的值。

所以我的问题是,如何在此列表中添加空白/特殊字符?

范围代码:

    Sub Start()

lf_index_row = 1
lf_name_space_row = 2

gf_namespace = ""

Do

lf_index_row = lf_index_row + 1

lf_material = Sheets(gc_data).Cells(lf_index_row, 1)
lf_location = Sheets(gc_data).Cells(lf_index_row, 2)

gf_new_namespace = "X" & lf_material & lf_location

If gf_new_namespace = "X" Then
 If gf_namespace = "" Then
    End
 Else
    'create namespace
    Set lf_range = Range(Cells(lf_start_number, 3), Cells(lf_end_number, 3))
    lf_range.Select
    Range(Cells(lf_start_number, 3), Cells(lf_end_number, 3)).Select
    ActiveWorkbook.Names.Add Name:=gf_namespace, RefersTo:=lf_range
    End
 End If
End If
If gf_namespace <> gf_new_namespace Then
    If gf_namespace = "" Then
        'initialize newnamespace
        gf_namespace = gf_new_namespace
        lf_start_number = lf_index_row
        lf_end_number = lf_index_row
    Else
        'create namespace
        Set lf_range = Range(Cells(lf_start_number, 3), Cells(lf_end_number, 3))
        lf_range.Select
        Range(Cells(lf_start_number, 3), Cells(lf_end_number, 3)).Select
        ActiveWorkbook.Names.Add Name:=gf_namespace, RefersTo:=lf_range
        'initialize newnamespace
        gf_namespace = gf_new_namespace
        lf_start_number = lf_index_row
        lf_end_number = lf_index_row
    End If
Else
    lf_end_number = lf_index_row
End If

Loop

End Sub


间接公式:

excel - VBA-数据验证空白单元格-LMLPHP

名字范围的定义:

excel - VBA-数据验证空白单元格-LMLPHP

最佳答案

如果该列表位于Range("A1:A10")中,这就是仅包含一个空位的验证列表的方法:

excel - VBA-数据验证空白单元格-LMLPHP

使用以下代码:

Sub TestMe()

    Dim list1               As Range
    Dim validationFormula   As String

    Set list1 = Range("A1:A10")

    Dim myCell As Range
    For Each myCell In list1
        If Not IsEmpty(myCell) Then
            validationFormula = validationFormula & myCell.Value2 & ","
        End If
    Next

    validationFormula = validationFormula & Chr(160)

    With Range("B5").Validation
        .Delete
        .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=validationFormula
        .IgnoreBlank = False
        .InCellDropdown = True
    End With

End Sub




代码的想法是什么?通过串联所有属于validationFormula的单元格,在Not IsEmpty()中创建验证字符串。 ValidationFormula准备就绪后,将向其中添加Chr(160),以确保我们也有可用的空白单元格。

甚至可以这样添加它:validationFormula = Chr(160) & "," & validationFormula,如果需要将其放在第一个位置:

excel - VBA-数据验证空白单元格-LMLPHP

准备好validationFormula字符串后,只要列表中只有一个空白-我们需要一个空白,就可以允许自己编写.IgnoreBlank = True

感谢这个家伙,因为他有一个循环的想法-https://superuser.com/questions/1254754/data-validation-from-2-lists-excel-2010

09-25 17:09
查看更多