Arrays 在动态验证列表中填写唯一日期

Arrays 在动态验证列表中填写唯一日期,arrays,validation,date,excel,vba,Arrays,Validation,Date,Excel,Vba,我试图用两个不同的动态验证列表填充两个单元格。第一个是字符串数组,第二个是日期数组 我正在使用以下代码 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range("G21")) Is Nothing Then Call getValidationSeries End If If Not Intersect(Target, R

我试图用两个不同的动态验证列表填充两个单元格。第一个是字符串数组,第二个是日期数组

我正在使用以下代码

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Range("G21")) Is Nothing Then

        Call getValidationSeries

    End If

    If Not Intersect(Target, Range("I21")) Is Nothing Then

        Call getValidationExpiry

    End If
End Sub
接 子getValidationSeries

Dim valseries(100) As String
     ~~~Other declarations

     ~~~~ code to fill identify unique values in valseries

Range("Charts!G21").Select
   With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=Join(valseries, ",")
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

End Sub

问题

对于第一个子系统,上面的方法很好,其中valseries是一个字符串数组。但是当valseries是第二个子函数中的日期数组时,它不起作用。我知道我不能在第二个函数中使用Join,因为它是一个日期变量。当我将valseries声明为一个变量而不是一个日期变量时,它工作了,但它将所有日期转换为字符串。我需要它们作为日期,当然我可以把它们重新转换成日期,但这不是有效的

有线索吗?我不想将唯一值存储在一个范围内

我看了这些类似于我做的字符串,但对日期没有太大帮助


提前谢谢

我在创建valseries的独特值时犯了一些错误。将valseries声明为Variant可以工作。将valseries声明为日期不起作用。无论如何,谢谢你的意见

下面是一个简单的工作示例,可以帮助您:

Sub dural()
    Dim DateArray(1 To 3) As Date
    Dim str As String

    DateArray(1) = DateSerial(2004, 12, 25)
    DateArray(2) = DateSerial(1945, 1, 18)
    DateArray(3) = DateSerial(2020, 7, 1)

    For i = LBound(DateArray) To UBound(DateArray)
        If str = "" Then
            str = CStr(DateArray(i))
        Else
            str = str & "," & CStr(DateArray(i))
        End If
    Next i

    ActiveCell.NumberFormat = "dd mmmm yyyy"
    With ActiveCell.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=str
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub

非常感谢您提供的示例和查看。除了强制使用日期格式之外,这与join的作用相同。正如我发布的,这个错误在其他地方。
Sub dural()
    Dim DateArray(1 To 3) As Date
    Dim str As String

    DateArray(1) = DateSerial(2004, 12, 25)
    DateArray(2) = DateSerial(1945, 1, 18)
    DateArray(3) = DateSerial(2020, 7, 1)

    For i = LBound(DateArray) To UBound(DateArray)
        If str = "" Then
            str = CStr(DateArray(i))
        Else
            str = str & "," & CStr(DateArray(i))
        End If
    Next i

    ActiveCell.NumberFormat = "dd mmmm yyyy"
    With ActiveCell.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=str
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub