2015-05-21 17 views
1

У меня есть диапазон данных в ячейках BA8, включая BN10 на рабочем листе "HR Eval Report" в активной книге.Ошибка выполнения '424' Требуемый объект

Я хочу сортировать этот диапазон в порядке возрастания на основе значений в ячейках BC8:BC10. Вот часть моих проблем кода вызывает:

Dim rngOutData As Range 
... 
ActiveWorkbook.Worksheets("HR Eval Report").Range("BA8").Select 
Set rngOutData = ActiveWorkbook.Worksheets("HR Eval Report").Range(Selection, _ 
Selection.End(xlToRight)).Select 

Set rngOutData заявление бросает ошибку. Я пробовал полностью квалифицировать диапазон, так как аналогичные ответы 424 указывают, что в качестве решения, но это не решило проблему. Любые советы очень оценили.

ответ

1

Вам необходимо объявить свои объекты и работать с ним. Избегайте использования выбора. Вы можете увидеть This

Вот простой способ сортировать по возрастанию диапазона на BC8

Dim rngOutData As Range 
Dim ws As Worksheet 

Set ws = ThisWorkbook.Sheets("HR Eval Report") 

Set rngOutData = ws.Range("BA8:BN10") 

With rngOutData 
    .Sort Key1:=ws.Range("BC8"), Order1:=xlAscending, Header:=xlYes, _ 
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ 
    DataOption1:=xlSortNormal 
End With 

Примечания: Если данные не имеют заголовков, то изменить Header:=xlYes к Header:=xlNo как предложено правильно @Подробнее в комментариях ниже.

+0

Имея только три строки для сортировки, вы думаете, что есть заголовок? OP может понадобиться ', Header: = xlNo'. 'Key1: = ws.Range (" BA8 ")' возможно, должно быть 'Key1: =. Столбцы (3)'. – Jeeped

+0

@ Jeeped: Я не знаю ответа на этот вопрос, как OP, как ничего не упомянутого :) Однако это хороший момент. Я упомянул об этом в вышеуказанной статье. –

+0

@ Jeeped: Упоминается, что в сообщении. Что касается вашего недавнего изменения в отношении ключа, то, о чем я упоминал, является правильным. –

-1

Попробуйте с этим, просто следовать ", если вы ... Шаг

Sub order() 

Sheets("HR Eval Report").Select 
Range("BC8").Select 
ActiveWorkbook.Worksheets("HR Eval Report").Sort.SortFields.Clear 
ActiveWorkbook.Worksheets("HR Eval Report").Sort.SortFields.Add Key:=Range("BC8"), _ 
    SortOn:=xlSortOnValues, order:=xlAscending, DataOption:=xlSortNormal 
With ActiveWorkbook.Worksheets("HR Eval Report").Sort 
    .SetRange Range("BA8:BN10") 
    .Header = xlNo ' IF YOU HAVE TITLE ON THE COLUMN THEN SET .Header x1Yes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

End Sub

+0

У меня есть только правильная ссылка для вас :) Проверьте 3-е предложение в моем посте;) –

+0

Спасибо, Луис, ваш код работал чудесно и без необходимости использовать Set. – GeorgeInNC

0

Причина код бросает ошибку в том, что вы пытаетесь присвоить возвращение значение от Range.Select к переменной объекта. Однако метод Select не возвращает объект, он возвращает True (если диапазон был успешно выбран).

Есть два способа достичь именно то, что ваш код пытается сделать: выбрать диапазон, а затем назначить выбор переменного объекта:

ActiveWorkbook.Worksheets("HR Eval Report").Range("BA8").Select 
ActiveWorkbook.Worksheets("HR Eval Report").Range(Selection, _ 
    Selection.End(xlToRight)).Select 
Set rngOutData = Selection 

или назначить диапазон переменных, а затем выбрать, что :

ActiveWorkbook.Worksheets("HR Eval Report").Range("BA8").Select 
Set rngOutData = ActiveWorkbook.Worksheets("HR Eval Report").Range(Selection, _ 
    Selection.End(xlToRight)) 
rngOutData.Select 

Однако почти наверняка есть гораздо более эффективные способы для достижения общей цели сортировки клеток, и вы должны вообще избегать использования Select (see this question for more). Для того, чтобы получить тот же самый диапазон в rngOutData, например, следующее быстрее, надежнее и легче читать:

With ActiveWorkbook.Worksheets("HR Eval Report") 
    Set rngOutData = .Range(.Range("BA8"), .Range("BA8").End(xlToRight)) 
End With 

Подобные относится и к ActiveWorkbook - вообще было бы лучше иметь переменный, содержащую ссылку на книгу и использовать ее.

+0

Спасибо, Aucuparia, ваш первый метод решил еще одну проблему, с которой я столкнулся. Все, что вам нравятся! – GeorgeInNC

Смежные вопросы