使用VBA调用WorksheetFunction.Unique获取唯一值时出现属性获取错误
获取Excel表格列唯一值的VBA报错解决
报错原因
- Excel版本不兼容:
WorksheetFunction.Unique仅支持Excel 365/2021及后续版本,旧版本调用会触发属性获取失败错误。 - 目标列无数据:当表格的Names列没有数据行时,
DataBodyRange为空,调用Unique函数会报错。 - 对象引用错误:工作表、表格或列名称拼写错误,导致无法找到对应的对象。
解决方法
方案1:兼容旧版本的字典实现
如果使用Excel 2019及更早版本,用字典提取唯一值:
Dim shops As Variant Dim nameDict As Object Dim cell As Range Dim i As Integer Set nameDict = CreateObject("Scripting.Dictionary") ' 先检查表格是否有数据行 If Not Worksheets("ALL_Shops").ListObjects("ALL_Shops").DataBodyRange Is Nothing Then For Each cell In Worksheets("ALL_Shops").ListObjects("ALL_Shops").ListColumns("Names").DataBodyRange If Not nameDict.Exists(cell.Value) Then nameDict.Add cell.Value, cell.Value End If Next cell End If ' 将字典的键转换为数组 shops = nameDict.Keys() ' 验证输出 For i = LBound(shops) To UBound(shops) Debug.Print shops(i) Next i
方案2:新版本Excel的修正写法
如果是Excel 365/2021版本,先判断数据区域是否存在再调用Unique:
Dim shops As Variant Dim nameRange As Range Set nameRange = Worksheets("ALL_Shops").ListObjects("ALL_Shops").ListColumns("Names").DataBodyRange If Not nameRange Is Nothing Then shops = Application.WorksheetFunction.Unique(nameRange) ' 遍历输出结果 Dim i As Integer For i = LBound(shops) To UBound(shops) Debug.Print shops(i) Next i Else Debug.Print "Names列没有数据" End If
内容的提问来源于stack exchange,提问作者M J
相关产品推荐
相关产品推荐

