Сортировка нескольких ключей в VBA; Ошибка выполнения 450: неправильное количество аргументов или недопустимое присвоение свойств

Я пишу этот код VBA, чтобы помочь мне сортировать базу данных, имеющуюся у меня (имя, счет-фактура, адрес и т. Д.). Недавно я узнал, как сортировать в VBA, не выбирая фактический диапазон на листе, и с этим я попытался сортировать несколько ключей (key1, key2, key3), но не повезло. Я продолжаю получать ошибку времени выполнения 450: неправильное количество аргументов или недопустимое присвоение свойств при запуске этого кода. Я хочу иметь возможность сортировать диапазон данных несколько раз, поэтому, например, сортируйте диапазон (A: K) по столбцу F, затем по E, затем по B и т. Д.

Вот код, который я использовал для сортировки моих столбцов:

ActiveSheet.Range("A:K").Sort _ Key1:=ActiveSheet.Range("F2"), Order1:=xlAscending, HEADER:=xlYes, Ordercustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _ Key2:=ActiveSheet.Range("E2"), Order2:=xlAscending, HEADER:=xlYes, Ordercustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, DataOption2:=xlSortNormal, _ Key3:=ActiveSheet.Range("D2"), Order3:=xlAscending, HEADER:=xlYes, Ordercustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, DataOption3:=xlSortNormal 

Это странно, потому что сначала я попытался запустить первые 2 клавиши (key1, key2), и он работал отлично, затем я скопировал и вставил вниз, чтобы создать следующий ключ (key3), и возникла ошибка. Когда я пытаюсь отлаживать, весь указанный выше код становится подсвеченным.

Единственный другой способ, который я могу придумать, – запустить код, на котором выбран диапазон (A: K) на листе, но я не хочу этого делать.

Похоже, вы пытаетесь переделать некоторые записанные макрокоманды. Записанный код для зарегистрированного метода Range.Find очень многословный. Вот вам все, что вам нужно.

 With Sheets("Sheet1") With Intersect(.Range("A1").CurrentRegion, .Range("A:K")) .Cells.Sort Key1:=.Columns(6), Order1:=xlAscending, _ Key2:=.Columns(5), Order2:=xlAscending, _ Key3:=.Columns(4), Order3:=xlAscending, _ Orientation:=xlTopToBottom, Header:=xlYes End With End With 

TBH, я не знаю, можете ли вы просто добавить Ordercustom:=1 в каждую строку этого. IIRC, пользовательские сортировки не могут выполняться более чем на одном поле за раз. В этом случае выполните три Ordercustom:=1 , каждый с Ordercustom:=1 но не забудьте сделать это в обратном порядке; например, столбец D, затем E и, наконец, первичный сортировка по столбцу F.

Обратите внимание, что для этого основного метода сортировки и вторичных сортировок существует не более трех столбцов. Если вам требуется больше, сначала откройте их и выполните следующий сортировку в трех последних преобладающих столбцах.

Interesting Posts

Использование 'convertXLStoCSV' приводит к '' Не удалось загрузить как DOM-документ '

Взаимодействие PHP с электронной таблицей Excel / скриптом VBA

Диапазон изменения, используемый для формулы

Форматирование ячейки на основе значений перпендикулярных строк / столбцов

Node.js Веб-и мобильные приложения – Где читать файл excel?

Ошибка времени выполнения 13: несоответствие типов

Получить данные из пользовательского приложения в EXcel

Java POI: проблема с выполнением пользовательской функции

VBA – Loop не будет увеличиваться на единицу каждый раз в столбце ID

Таблица сводных данных MS Excel – ошибка при удалении значений из фильтра

Сортировка столбцов Excel

Есть ли способ закрыть и открыть макрос VBA во время работы и снова запустить?

Excel if выражение возвращающее значение неформатированное

Excel VBA Autofilter Copy Вставить в новые именованные листы

Неверная внешняя процедура

Давайте будем гением компьютера.