vba - VBA - 数据验证空单元格
问题描述
我在 excel 中创建了命名范围,范围的命名基于 sheet2 上的键值。现在我在另一个 sheet1 上创建了下拉列表,使用公式 - INDIRECT,再次基于 key,在 sheet1 上。如何在下拉列表中添加空白/特殊符号?我无法在工作表上的已排序项目之间添加空单元格。表2:
我有 2 个基于 MAT/AE 列的命名范围,第一个是 C2:C4 的范围,下一个是 C5:C6。
我有 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
间接公式:
第一个命名范围的定义:
解决方案
如果列表在Range("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
通过连接所有的单元格在 中创建的Not IsEmpty()
。验证公式准备好后,Chr(160)
将其添加到其中,以确保我们也有可用的空单元格。
它甚至可以像这样添加:validationFormula = Chr(160) & "," & validationFormula
,如果您需要将它放在第一个位置:
一旦validationFormula
字符串准备好,我们就可以让自己写.IgnoreBlank = True
,只要列表中只有一个空白——我们需要的那个。
归功于这个人,因为循环的想法 - https://superuser.com/questions/1254754/data-validation-from-2-lists-excel-2010
推荐阅读
- switch-statement - 代码没有在 PowerShell 中拉幅 if 循环的问题
- excel - 尝试编译时,代码会抛出“End if without block If”。(用于嵌套循环的 if 语句)
- apache-spark - 多行字符串来激发数据框
- javascript - 尝试制作循环通过导航 onclick 的“下一个”和“上一个”按钮
- python - 从 JSON 文件访问特定值时出错
- google-app-maker - 如何检索 N 级多对多关系?
- swift - 完成时的 SwiftUI EditButton 操作
- linked-list - 为什么链表存储在堆中而不是堆栈中?
- javascript - 为什么 element.setAttribute('checked', true) 不起作用?
- azerothcore - AzerothCore:更改 authserver 的端口