0

下午好,

我需要以下项目的帮助。

我正在尝试找到一个可以根据输入自动排序和自动颜色的宏。

例如,我有三列。在第一列中,我输入了感兴趣基因的基因型。在同一个 Excel 中使用 VLOOKUP 表,该条目将在第二列中返回该基因的等效表型。最后一列,第三列,然后将返回此表型如何影响疾病状态(例如,正常 = 绿色、慢 = 黄色、快速 = 红色)。

让我们说这就是我们最初的电子表格的样子:

Genotype    Phenotype    Disease State 
XX          IM           Slow
YY          UM           Fast
XY          EM           Normal
YY          UM           Fast

自动着色和自动排序完成其任务后,该表应显示为:

Genotype    Phenotype    Disease State
XY          EM           Normal
XX          IM           Slow
YY          UM           Fast
YY          UM           Fast

我找到了自动排序或单独自动着色的宏,但是当我尝试组合这些宏时,我不断收到错误消息。

任何帮助将不胜感激!


这些是我一直在尝试的宏。自动排序工作得很好,但我遇到了自动着色问题。我得到的错误范围很广,有时什么也没有发生。

对于自动排序:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Range("A1").Sort Key1:=Range("A2"), _
          Order1:=xlDescending, Header:=xlYes, _
          OrderCustom:=1, MatchCase:=False, _
          Orientation:=xlTopToBottom
    End If
End Sub

对于自动着色:

Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
If Target.Row < 1 Then Exit Sub
Select Case LCase(Target.Value)
    Case "Normal"
        Target.EntireRow.Interior.ColorIndex = 3
    Case "Fast"
        Target.EntireRow.Interior.ColorIndex = 4
    Case "Slow"
        Target.EntireRow.Interior.ColorIndex = 5
        Target.EntireRow.Interior.ColorIndex = xlColorIndexAutomatic
End Select
Application.EnableEvents = True
End Sub

Sub changeApplicationEnableEvents2truee()
Application.EnableEvents = True
End Sub
4

2 回答 2

0

如果你有一个正常工作的自动排序宏,你可以使用它,然后尝试一些条件格式来设置颜色。

于 2013-10-01T19:24:28.663 回答
0

正如@pnuts 所说,一个问题是您似乎有 2 个 Worksheet_Change 例程。您的颜色更改代码存在一些问题:使用 LCase() 强制您的字符串值全部小写;只有更改后的行的颜色发生了变化,而不是整个恢复范围;等等

我对你所拥有的做了一些最小的改变。这会产生您想要的结果吗?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng As Range


    On Error Resume Next
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Range("A1").Sort Key1:=Range("A2"), _
          Order1:=xlDescending, Header:=xlYes, _
          OrderCustom:=1, MatchCase:=False, _
          Orientation:=xlTopToBottom

        For Each rng In Intersect(ActiveSheet.UsedRange, Range("A:A")).Cells

            If Not IsEmpty(rng) Then

                Select Case rng.Offset(, 2).Value
                Case "Normal"
                    rng.EntireRow.Interior.Color = vbGreen
                Case "Fast"
                    rng.EntireRow.Interior.Color = vbRed
                Case "Slow"
                    rng.EntireRow.Interior.Color = vbYellow
                Case Else
                    rng.EntireRow.Interior.ColorIndex = xlColorIndexNone
                End Select
            End If
        Next rng
    End If

End Sub
于 2013-10-01T21:16:00.970 回答