Я пытаюсь сортировать диапазон.VBA, workheet.sort.apply метод error
<edit>
Но я получаю сообщение об ошибке, когда скрипт (ниже) достигает линии с .apply
ближе к концу.
Сообщение об ошибке:
Run-time error '1004':
The sort reference is not valid.
Make sure that it's within the data you want to sort,
and the first Sort By box isn't the same or blank.
</edit>
<edit>
Диапазон для сортировки находится в пределах различной книги, чем тот, который вызывает функцию И Определяя диапазон для сортировки. </edit>
Каждый столбец в этом диапазоне должна быть отсортирован, с колонкой 1 сортируется, а затем колонку 2, а затем 3 comlumn ...
В результате того, что любая строка с одинаковыми значениями в столбце, далее сортируются на основе исходных колонн
например.
A | B | C | D
-----------------------
3 | 9 | 4 | 1
4 | 5 | 7 | 7
4 | 5 | 3 | 4
4 | 1 | 9 | 2
2 | 6 | 3 | 8
4 | 5 | 3 | 1
становится ...
A | B | C | D
-----------------------
2 | 6 | 3 | 8
3 | 9 | 4 | 1
4 | 1 | 9 | 2
4 | 5 | 3 | 1
4 | 5 | 3 | 4
4 | 5 | 7 | 7
У меня есть сценарий, как это до сих пор:
Private Sub tableSort(ByRef rng As Range)
If (rng.Rows.Count > 1) Then
With rng.Parent.Sort
With .SortFields
.Clear
.Add key:=rng, _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
Dim iCounter As Integer
For iCounter = 2 To rng.Columns.Count
.Add key:=Range(_
Cells(_
rng.Rows(1).Row, _
rng.Columns(iCounter).Column), _
Cells(_
rng.Rows(rng.Rows.Count).Row, _
rng.Columns(rng.Columns.Count).Column)) _
, SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
Next iCounter
End With
.SetRange rng
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
SendKeys "{ESC}"
End With
End If
End Sub
вы должны заменить 'Worksheets («Лист1»)' 'с rng.Parent' и убедитесь, что вы действуете на том же листе пропущенный' rng' Range принадлежит. Кроме того, это хорошая практика, используя декларацию «Option Explicit» над модулем и, следовательно, добавляя «Dim cols As Long, curcol As Long» сразу после 'Private Sub tableSort (ByRef rng As Range)' – user3598756
Спасибо за ваш ответ. (Вы оба) @ user3598756 ... Опция Явная находится наверху модуля. Я проверил ваше предложение использовать явный рабочий лист; однако проблема возникла. Я хорошо добавляю редактирование сообщения, но, возможно, стоит отметить, что: вызов функции находится в пределах ** 1 ** рабочего листа, а диапазон построен (на листе ** 1 **) для ** отдельного * * рабочий лист. – carl13
Спасибо @ user3598756 за ваше предложение! – cullan