Excel VBA:如何添加包含逗号包含值的数据验证列表,而不使用Range的引用

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使用数据验证列表填充它

Gar*_*ent 3

让我们对单元格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)

  • 我建议对此进行编辑,其中 Chr(130) 用作虚拟字符。这将满足所有 @civam 要求,即在列表中看起来像逗号,并在选择后实际导出为逗号。 (2认同)