例如,单击第二行,第二行变为黄色,单击第三行,第二行变回白色,同时第三行变为黄色。但是在我的代码中,第一次单击正常,第二次单击仅把前一行变回白色,第三次单击才能把另外一行变成黄色,代码如下:Option Explicit
Dim y As Integer
Dim lastrow As Integer
Dim color As Boolean    'False时变为黄色,True时变为白色Private Sub RowColor()
    With MSHFlexGrid1
    If color = False Then
        .Row = .RowSel      
        For y = 0 To .Cols - 1
            .Col = y
            .CellBackColor = &HC0FFFF   '变成黄色
        Next y
        lastrow = .Row 
        color = True
    Else
        .Row = lastrow
        For y = 0 To .Cols - 1
            .Col = y
            .CellBackColor = &HFFFFFF   '变成白色
        Next y
        color = False
    End If
    End With
End Sub请各位帮忙看看如何改进啊?

解决方案 »

  1.   

    Private Sub MSHF_EnterCell()
        MSHF.CellForeColor = &HC0FFFF   '变成黄色
    End SubPrivate Sub MSHF_LeaveCell()
        MSHF.CellForeColor = &HFFFFFF   '变成白色
    End Sub
      

  2.   

    感觉没这么复杂吧,用两个变量记录所点的行就行了Option ExplicitPublic j As LongPrivate Sub RowColor(i As Long, j As Long)
      'i代表现在点的这一行
      Dim n As Long  'n代表列
       With Me.MSHFlexGrid1
            For n = 1 To .Cols - 1
               .Row = i
               .Col = n
               .CellBackColor = &HC0FFFF
               
               
               If j > 0 And i <> j Then
               .Row = j
               .CellBackColor = &HFFFFFF
               End If
            Next n
            j = i
       End WithEnd SubPrivate Sub Form_Load()
      With Me.MSHFlexGrid1
         .Cols = 5
         .Rows = 6
      End With
    End SubPrivate Sub MSHFlexGrid1_Click()
      Call RowColor(Me.MSHFlexGrid1.Row, j)
      Debug.Print j
    End Sub