civ*_*vam 5 excel vba excel-vba
我需要向Cell添加一个数据验证列表,其中少数值包含逗号.我有同样的问题,如包含逗号字符的数据验证
但我无法引用范围,因为我正在创建一个新工作簿并使用数据验证列表提供其单元格.因此引用对我不起作用,因为某些值包含逗号,所以我不能将Range设置为String并在Formula1之后使用它
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=myStr
Run Code Online (Sandbox Code Playgroud)
另一个想法我发现我可以用其他字符(虚拟字符)替换逗号,并在填充单元格后用逗号替换该虚拟字符,但问题是如何用逗号替换该虚拟字符?
另一种方法是覆盖Formula1,以便我可以使用虚拟角色作为分隔符,但我不知道如何实现这一点.
请建议任何解决方案,我的最终目标是创建一个新的工作簿,并通过Excel VBA使用数据验证列表填充它
让我们对单元格B9使用虚拟字符方法。这将设置DV:
Sub InternalString2()
Range("B9").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Replace("alpha%ralpha,beta%waiter,gamma%hammer,delta%faucet","%",Chr(130))
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = False
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
其中Chr(130)是虚拟的。这.ShowError很重要。
现在要替换虚拟对象,我们使用事件宏:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B9")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Range("B9").Replace What:=Chr(130), Replacement:=","
Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)