जब उपयोगकर्ता सेल रंग बदलता है तो मैं रंग से तालिका को स्वत: क्रमबद्ध करने का प्रयास कर रहा हूं।

मैं इसे केवल एक कॉलम के लिए चाहता हूं, इसलिए मैंने इसे Worksheet_Change के अंतर्गत रखा है

Private Sub Worksheet_Change(ByVal Target As Range)

  Set taskPriorityTable = ActiveSheet.ListObjects("TaskPrioritiesTable")
  Set priorityRange = ActiveSheet.ListObjects("TaskPrioritiesTable[PRIORITY]")
  
  If Target.Column = 3 Then
  
    If Not Intersect(Target, priorityRange) Is Nothing Then
        
      Dim ws As Worksheet

      Set ws = ActiveSheet
      
      MsgBox "sorting"

      With taskPriorityTable.Sort 'ws.Sort
        MsgBox "sorting by colors"

        With .SortFields
          .Clear
          .Add(Range("TaskPrioritiesTable[PRIORITY]"), xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(255, 199, 206)
          .Add(Range("TaskPrioritiesTable[PRIORITY]"), xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(255, 235, 156)
          .Add(Range("TaskPrioritiesTable[PRIORITY]"), xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(198, 239, 206)

        End With
        MsgBox "sorting ended"
        .SetRange priorityRange.CurrentRegion
        .Orientation = xlTopToBottom
        .Header = xlYes
        .MatchCase = False
        .SortMethod = xlPinYin
        .Apply

      MsgBox "completed"
      End With

    End If
  MsgBox "text complete"

  End If
End Sub

यह काम कर रहा था लेकिन यह दुर्घटनाग्रस्त होने लगा। मैंने ऊपर दिए गए कोड में .Add(Range को .Add(priorityRange) से बदलकर एक कर दिया है। यह अभी भी क्रैश या सॉर्ट नहीं करता है।

मैं अब msgbox पॉपअप देखता हूं, लेकिन फिर भी सॉर्ट नहीं करता है। आरजीबी मान सही हैं।

0
user1828605 19 जुलाई 2020, 06:01

1 उत्तर

सबसे बढ़िया उत्तर

ListObject का उपयोग करके तालिका को आरोही और अवरोही क्रमबद्ध करें

निम्न कोड तालिका को निम्नतम से उच्चतम मान तक सॉर्ट करने जा रहा है।

Sub Sort()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim rng As Range
    
    Set ws = ActiveSheet
    Set tbl = ws.ListObjects("myTable")
    Set rng = Range("myTable[Numbers]")
    
    With tbl.Sort
       .SortFields.Clear
       .SortFields.Add Key:=rng, SortOn:=xlSortOnValues, Order:=xlAscending
       .Header = xlYes
       .Apply
    End With
End Sub

आप इस स्निपेट को अपनी इच्छानुसार संशोधित कर सकते हैं।

3
user12275552user12275552 19 जुलाई 2020, 03:35