0

我终于解决了这个问题。因为我没有找到任何可用的来源。

4

1 回答 1

0

我用两个步骤解决了它。

  1. 用数据填充列表视图

  2. 然后逐行着色各个数据。
    所以这是对我有用的代码。

     Private Sub UserForm_Initialize() 'Filling with data
     lrow = ThisWorkbook.Sheets(1).Range("A99999").End(xlUp) + 1
     With ListView1
         .View = lvwReport
          .FullRowSelect = True
         .LabelEdit = lvwManual
         .Appearance = cc3D
    
    With .ColumnHeaders
    .Add , , "column1", 16
    .Add , , "column2", 50
    .Add , , "column3", 75
    .Add , , "column4", 75
    .Add , , "column5", 55
    .Add , , "column6", 60
    .Add , , "column7", 70
    .Add , , "column8", 70
    .Add , , "column9", 70
    .Add , , "column10", 70
    End With
    
    For i = 2 To lrow
    Set li = .ListItems.Add(, , Sheets(1).Cells(i, 1).Text)'this is the first column
     'these are the sub columns
    li.ListSubItems.Add , , Sheets(1).Cells(i, 2).Text
    li.ListSubItems.Add , , Sheets(1).Cells(i, 3).Text
    li.ListSubItems.Add , , Sheets(1).Cells(i, 4).Text
    li.ListSubItems.Add , , Sheets(1).Cells(i, 5).Text
    li.ListSubItems.Add , , Sheets(1).Cells(i, 6).Text
    li.ListSubItems.Add , , Sheets(1).Cells(i, 7).Text
    li.ListSubItems.Add , , Sheets(1).Cells(i, 8).Text
    li.ListSubItems.Add , , Sheets(1).Cells(i, 9).Text
    li.ListSubItems.Add , , Sheets(1).Cells(i, 10).Text
    Next I
    End With
    ListView1_AfterUpdate
    End Sub
    
    Private Sub ListView1_AfterUpdate() 'the actual coloring
    Dim x, y, r, c As Integer
    r = ListView1.ListItems.Count
    c = ListView1.ColumnHeaders.Count - 1
    For y = 1 To c
    For x = 2 To r
    
    
         If Sheets(1).Cells(x, 20) <> "" Then 'condition for coloring
             ListView1.ListItems(x - 1).ListSubItems(y).ForeColor = RGB(150, 0, 30)
         Else
             ListView1.ListItems(x - 1).ListSubItems(y).ForeColor = vbBlack
         End If
         Next
    Next
    x = Empty 
    For x = 2 To r 'It is required since it distinguishes listitems and listsubitems.
         If Sheets(1).Cells(x, 20) <> "" Then
             ListView1.ListItems(x - 1).ForeColor = RGB(150, 0, 30)
    
         Else
             ListView1.ListItems(x - 1).ForeColor = vbBlack
         End If
         Next
    End Sub
    
于 2021-02-04T08:10:30.473 回答