Вы не включили столбец имен в диапазон для сортировки.
У вас есть
Range("B5:Q" & lrow).sort Key1:=KeyRange, Header:=xlYes, Order1:=xlDescending
Но это должно быть
Range("A5:Q" & lrow).sort Key1:=KeyRange, Header:=xlYes, Order1:=xlDescending
Редактировать 1:
Поскольку имена в столбце B, а не A, как я предполагал, возможно, множественная сортировка применяется друг к другу. Чтобы исключить эту вероятность, попробуйте выполнить сортировку с использованием объекта листа вместо объекта диапазона (после очистки старой сортировки).
Вот как
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim KeyRange As Range
Dim ColumnCount As Integer
Dim lrow As Long
lrow = Sheets("Tracker").Cells(Rows.Count, "B").End(xlUp).Row
On Error Resume Next
ColumnCount = Range("B5:Q" & lrow).Columns.Count
Cancel = False
If Target.Row = 5 And Target.Column <= ColumnCount Then
Cancel = True
Worksheets("Backend").Range("C1") = Target.Value
With Me
.Sort.SortFields.Clear
.SortFields.Add2 Key:=Target, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.Sort.SetRange .Range("B5:Q" & lrow)
.Sort.Header = xlYes
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
End With
With Worksheets("Backend")
.Range("A1") = Target.Column
.Calculate
For i = 1 To ColumnCount
Range("B5:Q" & lrow).Cells(1, i).Value = .Range("A4").Offset(0, i - 1).Value
Next i
End With
End If
On Error GoTo 0
End Sub