转换为单元格验证列表时,正在转换字典键

时间:2016-06-30 15:05:44

标签: vba validation date dictionary

我遇到了细胞数据验证中的格式化问题。 我正在尝试在单元格中添加两个列表,供用户在日期范围内进行选择。

我有两个几乎相同的字典,它们保存日期,它们的键是“yyyy-mm-dd”格式但是字符串。我操纵字典以删除不必要的日期并仅保留所需的日期。

我正在使用以下代码来验证验证中的密钥。

With .Range("DATE")
    .Validation.Delete
    .Cells(1, 1).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
    Formula1:=Join(dict_MIN.Keys, ",")
    .Cells(1, 2).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
    Formula1:=Join(dict_MAX.Keys, ",")
End With

除了一位之外它正常工作。然后,键中的字符串不被视为字符串而是日期。因此,列表中的格式会发生变化,并显示为yy / mm / dd,这对用户来说非常困惑。

有没有办法将这些键作为字符串连接起来,所以它们的值按原样传递?

由于

1 个答案:

答案 0 :(得分:0)

以下对我来说没问题

Dim s As String
Dim d As New Scripting.Dictionary

d.Add "2016-12-02", ""
d.Add "2016-12-08", ""
d.Add "2016-12-09", ""

s = Join(d.Keys(), ",")

ActiveCell.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=s

这里也是自定义连接尝试

Public Function CustomJoin(arr As Variant, strDelim As String) As String

Dim intCounter As Integer

For intCounter = LBound(arr) To UBound(arr)
    CustomJoin = CustomJoin & format(arr(intCounter),"dd/mm/yyyy") & IIf(intCounter < UBound(arr), strDelim, vbNullString)
Next intCounter

End Function