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

我需要添加一个数据validation列表到less数值包含逗号的单元格。 我有这样的数据validation包括逗号字符相同的问题

但是我不能引用范围,因为我正在创build一个新的工作簿,并用数据validation列表提供它的单元格。 所以引用不适合我,因为一些值包含逗号,所以我不能将范围设置为string,并在Formula1后使用

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=myStr 

另一个想法,我发现我可以用其他字符(虚拟字符)replace逗号,填充单元格后用逗号replace虚拟字符,但问题是如何用逗号replace虚拟字符?

另一种方法是重写Formula1,以便我可以使用虚拟字符作为分隔符,但我不知道如何实现这一点。

请提出任何解决scheme,我的最终目标是创build一个新的工作簿,并通过Excel VBA填充数据validation列表

让我们使用单元格B9哑元字符方法。 这build立了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 

Chr(130)虚拟的.ShowError非常重要。

现在要replace哑元 ,我们使用事件macros

 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 

正如另一个答案所述,逗号不能逃脱。 就我所见,唯一的解决scheme是向新的工作簿中添加一个额外的工作表,为列表添加值,命名该范围,隐藏该工作表并引用指定的范围。 这是一个公平的步骤,但真的是唯一的方法。

正如@snoopen所build议的那样,我已经创build了一个包含数据validation列表的虚拟工作簿 ,并且每次运行代码时都将其保存为虚拟工作簿,以保存所需的新文件名。 之后,它将填充所需的数据。