You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:37:15