Сортировка диапазона в определенной рабочей таблице не работает - PullRequest
0 голосов
/ 08 января 2019

Я сделал код для простой сортировки вкладки на листе под названием «Сэйси». Это работает, когда "Сэйси" - активный лист. Но я бы хотел, чтобы код запускался с другого листа. Код:

Range("H1:K2001").sort Key1:=Range("H1"), Order1:=xlAscending, Header:=xlYes

Код написан в модуле.

Поэтому я добавил то, что считал необходимым для сортировки, когда активен другой лист:

Я пытался:

Dim sh As Worksheet
Set sh = ActiveWorkbook.Sheets("Saisie")

sh.Range("H1:K2001").sort Key1:=Range("H1"), Order1:=xlAscending, 
Header:=xlYes

Также:

With Worksheets("Saisie").Range("H1:K2001")
    .sort Key1:=.Range("H1"), Order1:=xlAscending, Header:=xlYes
End With

Для обоих я имею ошибку "1004". Кто-нибудь знает почему?

Я создал десятки форумов, на которых эти решения работают для других пользователей.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Сначала проверьте: является ли рабочий лист частью ActiveWorkbook? Если открыта другая рабочая книга, весь код завершится ошибкой уже в операторе Set sh = ActiveWorkbook.Sheets("Saisie"). Вы можете использовать ThisWorkbook вместо.

Предполагая, что это не ваша проблема: вы должны понимать, над какими объектами вы точно работаете. Ваша первая попытка не удалась из-за SortKey: вы пишете Key1:=Range("H1"). Range, без квалификации, использует диапазон листа active , и это не то, что вы хотите (и это не удастся). Попробуйте например

sh.Range("H1:K2001").sort Key1:=sh.Range("H1"), Order1:=xlAscending, Header:=xlYes

Ваша вторая попытка связана с другой проблемой: вы используете Range в пункте with и пишете Key1:=.Range("H1") в качестве критерия. Теперь .Range("H1") будет относительно вашего диапазона в предложении with. Это приводит к эффективному использованию диапазона O1 - опять же не то, что вы хотите.

Есть много способов исправить это, например, используя рабочий лист в предложении with.

With ThisWorkbook.Worksheets("Saisie")
    .Range("H1:K2001").sort Key1:=.Range("H1"), Order1:=xlAscending, Header:=xlYes
End With
0 голосов
/ 08 января 2019

В вашем втором тесте:

With Worksheets("Saisie").Range("H1:K2001")
    .sort Key1:=.Range("H1"), Order1:=xlAscending, Header:=xlYes
End With

Вы должны использовать Worksheets("Saisie").Range("H1") вместо .Range("H1")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...