【发布时间】:2014-01-15 11:06:11
【问题描述】:
我正在尝试用两个不同的动态验证列表填充两个单元格。第一个是字符串数组,第二个是日期数组。
我正在使用以下代码。
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
和
Sub getValidationExpiry()
Dim valseries(100) As Date
~~~Other declarations
~~~~ code to fill identify unique dates in valseries
Range("Charts!I21").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 是一个字符串数组的第一个 sub 来说,上面的工作正常。但是当 valseries 是第二个子中的日期数组时不起作用。我知道我不能在第二个函数中使用 Join,因为它是一个日期变量。当我将 valseries 声明为 Variant 而不是 Date 变量时,它起作用了,但是它将所有日期转换为字符串。我需要它们作为日期(当然我可以将它们重新转换回日期,但效率不高)
有什么线索吗?我不想将唯一值存储在一个范围内。
我查看了这些(类似于我为字符串所做的),但对日期没有太大帮助。
Programmatically creating Excel VBA validation list
Excel Validation Drop Down list using VBA
Excel: How to create dynamic data validation list based on data table
提前致谢。
【问题讨论】:
标签: arrays validation date excel vba