VBA-数据验证空单元格

VBA-数据验证空单元格,vba,excel,Vba,Excel,我在excel中创建了命名范围,范围的命名基于sheet2上的键值。 现在我在另一个sheet1上创建了下拉列表,使用公式用法-间接,再次基于键,在sheet1上。如何将空白/特殊符号添加到下拉列表?我无法在工作表上已排序的项目之间添加空单元格。 第2张: 我有两个基于MAT/AE列的命名范围,第一个是C2:C4范围,第二个是C5:C6范围 这里我有Sheet1,我使用数据验证,连接MAT1和AE11使用公式间接,我有基于Sheet2范围的值 所以我的问题是,如何将空白/特殊字符添加到此列表

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

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

这里我有Sheet1,我使用数据验证,连接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
Sub Start()
lf_索引_行=1
lf\u name\u space\u row=2
gf_namespace=“”
做
lf_索引_行=lf_索引_行+1
lf_材料=图纸(gc_数据)。单元格(lf_索引_行,1)
lf_位置=图纸(gc_数据)。单元格(lf_索引_行,2)
gf\u new\u namespace=“X”&lf\u材料和lf\u位置
如果gf_new_namespace=“X”,则
如果gf_namespace=”“,则
终点
其他的
'创建命名空间
设置lf_范围=范围(单元格(lf_开始编号,3),单元格(lf_结束编号,3))
lf_range.Select
范围(单元格(左前开始编号,3),单元格(左前结束编号,3))。选择
ActiveWorkbook.Names.Add Name:=gf\u命名空间,referesto:=lf\u范围
终点
如果结束
如果结束
如果gf_名称空间gf_新名称空间,则
如果gf_namespace=”“,则
'初始化新名称空间
gf\u名称空间=gf\u新名称空间
lf\u开始\u编号=lf\u索引\u行
lf\u结束\u编号=lf\u索引\u行
其他的
'创建命名空间
设置lf_范围=范围(单元格(lf_开始编号,3),单元格(lf_结束编号,3))
lf_range.Select
范围(单元格(左前开始编号,3),单元格(左前结束编号,3))。选择
ActiveWorkbook.Names.Add Name:=gf\u命名空间,referesto:=lf\u范围
'初始化新名称空间
gf\u名称空间=gf\u新名称空间
lf\u开始\u编号=lf\u索引\u行
lf\u结束\u编号=lf\u索引\u行
如果结束
其他的
lf\u结束\u编号=lf\u索引\u行
如果结束
环
端接头
间接公式:

第一个命名范围的定义:


检查行值为3、列值为4的单元格是否为空,并显示以下内容:

Set objExcel = CreateObject("Excel.Application")
Set excelInput = objExcel.Workbooks.Open("myfile")
If excelInput.Sheets("Sheet1").Cells(3, 4) <> vbNullString Then
    'do the thing
End If
Set-objExcel=CreateObject(“Excel.Application”)
设置excelInput=objExcel.Workbooks.Open(“myfile”)
如果excelInput.Sheets(“Sheet1”).单元格(3,4)为空字符串,则
“去做吧
如果结束

上面的代码是VBScript,但应该可以工作。如果不是,则在VBA中几乎相同。

如果列表在
范围(“A1:A10”)
这是如何实现只有一个空位置的验证列表:

使用以下代码:

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
中生成,方法是将
非IsEmpty()的所有单元格串联起来。一旦validationFormula准备好了,
Chr(160)
就会添加到其中,以确保我们也有可用的空单元格

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

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


感谢这个家伙,对于循环的想法-

你能从
Igonre blank
中删除复选标记吗?我可以删除它,但它不起作用,因为在我的范围内没有空格。那么你想做什么?不修改Sheet2上的范围,而是直接在下拉列表中添加一个或多个值?可能是动态的?为什么你不能把你的特殊字符放在指定的范围内?如果我在下拉列表中使用公式间接,我如何添加它们,可能有什么我不知道的?我仍然不清楚你的意图是什么。您想在数据验证下拉列表中增加一行,对吗?这个额外的行应该包含什么?没有什么?特殊字符(哪些字符)?您不能将这些添加到现有的命名范围(为什么不能)?您必须看到,除了您在这里告诉我们的内容之外,我们对您的项目、其约束条件和要求以及您想要实现的目标一无所知。您能否详细说明您的解决方案将如何回答以下问题:“如何将空白/特殊符号添加到下拉列表?”您建议通过VBA使用某种外部验证代码-如果用户同时打开同一个文件,该代码将如何工作?哦,对不起。我以为你问我如何检查单元格是否为空,因为我只阅读标题lol。但是你可以尝试将vbNullString添加到下拉列表中。在这种情况下,我的错误是实际阅读了问题。。。confusedI认为应该可以为数据验证源生成一个列表。我的问题是,我想通过UDF生成该列表,并直接将其指定为源。(也许这也行得通?)不知何故,我没有考虑直接使用VBA设置所有内容。。。因此,有一个+1。很好的解决方案!哦,请注意,您的解决方案依赖于语言。对于某些语言设置(例如德语),逗号不是有效的列表分隔符。在本例中,它需要是分号。您可以使用通用的
Application.International(xlListSeparator)
来覆盖所有情况。@Inarion-事实并非如此。分隔符仅在
Excel
中有问题。另一方面,
VBA
不关心德国的列表分隔符。有时,Excel决定今天不玩。。。(这就是为什么这么做的原因!);)@伊纳里翁万岁