2011-12-30 8 views
6

Я использую VBA для Excel 2010 и случайным образом получать следующее сообщение об ошибке:Excel VBA Run-Time Error 1004

Run-time error '1004': "The sort reference is not valid. Make sure it's within the data you want to sort, and the first Sort By box isn't the same or blank."

Это код

'Sort the active rows 
With ActiveWorkbook.Worksheets("Product Backlog").Sort 
    .SetRange Range("A4:F51") 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 
+1

Наиболее вероятной причиной является не являются в пределах требуемого рабочего листа. Не используйте 'ActiveWorkbook', используйте' Sheets ("xxxxx") '. –

ответ

4

Род прямоугольника пустой, то это ваша проблема. Я никогда не использовал объект Sort, как ваш, но я вижу, что вы не определили ключ или диапазон для сортировки, а только диапазон, который нужно отсортировать. Должен быть определен ключ, например Range («A4») или что-то еще. Я посмотрел его, он должен .sortfields.add (диапазон) в нем, такие как:

'Sort the active rows 

    With ActiveWorkbook.Worksheets("Product Backlog").Sort 
     .SetRange Range("A4:F51") 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 

     .SortFields.Add Key:=Range("A4:F51").Columns(1), SortOn:=xlSortOnValues, _ 
     Order:=xlDescending, DataOption:=xlSortNormal 

     .Apply 
    End With 

Я использую функцию сортировки следующим образом:

ActiveWorkbook.Worksheets("Product Backlog").Range("A4:F51").Sort _ 
    Key1:= ActiveWorkbook.Worksheets("Product Backlog").Range("A4:F51").Columns(1), _ 
    Header:= xlYes, _ 
    Orientation:=xlSortColumns, _ 
    MatchCase:=False, _ 
    SortMethod:=xlPinYin 
+0

Если у вас открыто более одной книги, обязательно запишите свою книгу, используя рабочие книги («MyWorkbook»). Активируйте, если вы собираетесь использовать ActiveWorkbook. – Motes

+0

Вот что мне нужно, спасибо. Кстати, мне пришлось вернуть Ориентацию к тому, как у меня было это в противном случае, случилось странное (Orientation = xlTopToBottom). – Aaron

+1

Да, извините, xlSortColumns = xlTopToBottom, xlSortRows = xlLeftToRight. – Motes

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