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