2014-01-15 4 views
0

Я пытаюсь заполнить две ячейки двумя разными динамическими списками проверки. Первый - это массив строк, а второй - массив дат.Заполнение уникальных дат в динамическом списке валидации

Я использую следующий код.

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 

Вслед за 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 является массивом строки. Но не работает, когда valseries - это массив дат во втором суб. Я знаю, что не могу использовать Join во второй функции, потому что это переменная date. Когда я объявлял valseries как вариант вместо переменной 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

Спасибо заранее.

ответ

0

Я ошибался в создании уникальных значений валзеров. Объявление valseries как Variant. Объявление valseries как Date не работает. Спасибо за взгляды в любом случае.

0

Вот простой рабочий пример, который может помочь вам:

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 
+0

Большое спасибо за пример и имеющий вид. Это делает то же самое, что и объединение, за исключением форсирования формата даты. Как я уже писал, ошибка была где-то в другом месте. – Peekay

Смежные вопросы