VBA 使用数组值作为单元格验证值

标签 vba excel

我现在在做什么,

  • 使用来自多个工作表的特定列(项目列)填充具有唯一数据的数组
  • 使用上述数组值
  • 在不同的工作表中填充下拉列表

    但是,我在验证步骤中有一个错误,我尝试设置 Formula1:=arrItems()
    这是我的代码:
        Dim ws As Worksheet
        Dim tmpItems As String
        Dim arrItems() As String
        Dim tmpDates As String
        Dim arrDates() As String
        Dim ItemColumn As Range
        Const ItemHeaderCell As String = "Item"
        Dim EmptyRange As Range
    
        For Each ws In ActiveWorkbook.Worksheets
          If ws.Name <> "Raw Data" Then
            ws.ListObjects.Add(xlSrcRange, ws.UsedRange, , xlYes).Name = ws.Name
            ws.ListObjects(ws.Name).TableStyle = "TableStyleMedium9"
            tmpDates = tmpDates & ws.Name & "|"
            Set ItemColumn = ws.UsedRange.Find(ItemHeaderCell, , xlValues, xlWhole)
    
            For Each EmptyRange In Intersect(ItemColumn.EntireColumn, ws.UsedRange).Cells
            'skip the header and empty cells
              If Not IsEmpty(EmptyRange.Value) And EmptyRange.Address <> ItemColumn.Address 
            And (InStr(tmpItems, EmptyRange) = 0) Then
                tmpItems = tmpItems & EmptyRange.Value & "|"
              End If
            Next EmptyRange
          End If
        Next ws
    
        If Len(tmpItems) > 0 Then 
           tmpItems = Left(tmpItems, Len(tmpItems) - 1)
           arrItems = Split(tmpItems, "|")
    
           If Len(tmpDates) > 0 Then 
             tmpDates = Left(tmpDates, Len(tmpDates) - 1)
             arrDates = Split(tmpDates, "|")
    
             Dim worksheet2 As Worksheet
             Set worksheet2 = ActiveWorkbook.Sheets.Add(Before:=ActiveWorkbook.Sheets(1))
             worksheet2.Name = "Main"
    
             With worksheet2.Range("A1").Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=arrItems()
             End With
    

    如何纠正这个错误?

    最佳答案

    Validation.Formula1是一个字符串,而不是一个数组。如果我正确阅读了您的代码,您可以将填充 tmpItems 的行更改为:

    tmpItems = tmpItems & EmptyRange.Value & ","
    

    之后只需去掉最后一个逗号并使用 tmpItems为您的Formula1 .

    关于VBA 使用数组值作为单元格验证值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31306666/

    相关文章:

    mysql - DAO.Recordset.Update 导致记录锁

    VBA OnError 异常处理不起作用

    excel - 在 Excel VBA 的 HTTP 请求中添加哪些引用

    excel - 是否有一个库可以获取 Microsoft Office 文件(Word/Excel/ppt)并渲染它们的图像?

    excel - 从 Outlook 打开 Excel 时 VBA 只读

    sql - 需要 vba-excel 和 Sql 查询帮助

    excel - 删除字段中存在重复条目的行

    .net - 寻找 32 位 Microsoft 通用控件 (ListView) 的替代品

    vba - Excel 2007 VBA 宏逐行读取文本文件如何停止逗号 (,) 分隔

    excel - 有关如何部署和共享 VSTO 解决方案的最佳内容