【问题标题】:Filling unique dates in a dynamic validation list在动态验证列表中填写唯一日期
【发布时间】: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


    【解决方案1】:

    我在创造 valseries 的独特价值时犯了一些错误。将 valseries 声明为 Variant 有效。将 valseries 声明为 Date 不起作用。无论如何感谢您的意见。

    【讨论】:

      【解决方案2】:

      这是一个简单的工作示例,可能会对您有所帮助:

      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 做同样的事情。正如我发布的那样,错误出在其他地方。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多