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

ListView重复条目仅修改当前条目颜色的VBA问题求助

解决ListView仅修改新增条目颜色的问题

你的问题出在直接修改了ListView1.ForeColor——这个属性控制的是整个ListView控件的默认前景色,所以每次添加条目时,所有已存在的条目都会跟着变成你设置的颜色。

另外你尝试用li.ForeColor没效果,大概率是因为ListView的两个关键属性没设置对:

  • View必须设为lvwReport(报表视图)
  • FullRowSelect必须设为True

修正后的代码如下:

Private Sub addtolv()
    Dim dupe As Boolean
    Dim li As ListItem
    ' note: RecordNumber writecolumn and LASTROW are globals
    dupe = False
    
    ' 先判断当前条目是否为重复项
    If Application.WorksheetFunction.CountIf(Range(ThisWorkbook.writecolumn & "2:" & ThisWorkbook.writecolumn & CStr(LASTROW)), Range("B" & RecordNumber)) > 0 Then
        dupe = True
    End If
    
    With ListView1
        ' 添加新条目
        Set li = .ListItems.Add(, Worksheets("Sheet2").Range("B" & RecordNumber), Worksheets("Sheet2").Range("A" & RecordNumber), 0)
        li.SubItems(1) = Worksheets("Sheet2").Range("B" & RecordNumber)
        li.SubItems(2) = Worksheets("Sheet2").Range("C" & RecordNumber)
        li.SubItems(3) = Worksheets("Sheet2").Range("D" & RecordNumber)
        li.SubItems(4) = Worksheets("Sheet2").Range("E" & RecordNumber)
        li.SubItems(5) = RecordNumber
        
        ' 仅给当前新增的条目单独设置颜色
        If dupe Then
            li.ForeColor = vbBlue
        Else
            li.ForeColor = vbBlack
        End If
    End With
End Sub

额外设置要求

在用户窗体设计模式下,选中ListView1,在属性窗口里修改:

  • 把View属性改成3 - lvwReport
  • 把FullRowSelect属性改成True

这样li.ForeColor才能正常生效,只会改变当前新增条目的颜色,不会影响之前的条目。

内容的提问来源于stack exchange,提问作者Richard Chism

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:44:53