2014-02-20 3 views
1

Я унаследовал таблицу Excel, которая при работе на excel 2007 отлично работает. проблема в том, что он был на компьютере, и у новой машины только Excel 2003 - электронная таблица больше не работает правильно. проблема заключается в «сортировке» функции в бит кода vba.Excel 2007 до Excel 2003 VBA «Сортировка» вопрос

Я задавался вопросом, знал ли кто-нибудь, могу ли я изменить его для работы в Excel 2003? Я видел похожие записи, но я всего лишь новичок, когда дело доходит до vba. Я просто ищу простое решение «копировать и вставлять» - заменив бит 2007 на бит 2003 года. Everythig еще работает.

Heres код -

'Sort by Class then by Entry No 
ActiveWorkbook.Worksheets("Competitor & Class Entry").Sort.SortFields.Clear 
ActiveWorkbook.Worksheets("Competitor & Class Entry").Sort.SortFields.Add Key _ 
    :=Range(ClassRange1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ 
    :=xlSortNormal 
ActiveWorkbook.Worksheets("Competitor & Class Entry").Sort.SortFields.Add Key _ 
    :=Range("A9:A308"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ 
    :=xlSortNormal 
With ActiveWorkbook.Worksheets("Competitor & Class Entry").Sort 
    .SetRange Range("A9:AE308") 
    .Header = xlGuess 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

Любая помощь очень ценится! (вместе с тем, как вставить его!)

+0

Я знаю сво «Sorton» команду то не поддерживается в 2003 году код в основном сортирует список конкурентов в их соответствующих классов, а затем, чтобы их соответствующие номера записей, поэтому я могу распечатать стартовый список для каждого класса. – user3335033

ответ

1

Мое предложение состояло в том, чтобы использовать макросъемку один раз на данных, которые вы хотите отсортировать и изменить сохраненный код в соответствии с вашими потребностями.

0

не уверен, что если какой-либо необходимости, но 3 раза в коде, используется диапазон без указания листа:

ActiveWorkbook.Worksheets("Competitor & Class Entry"). 

перед тем

:=Range("A9:A308"), SortOn:= 

и

.SetRange Range("A9:AE308") 
.Add Key :=Range(ClassRange1) 

Во всяком случае Я бы переписал код с помощью:

Dim Sh as worksheet 
set sh=ActiveWorkbook.Worksheets("Competitor & Class Entry") 

with Sh.Sort 
    with .SortFields 
     .Clear 
     .Add Key :=SH.Range(ClassRange1), SortOn:=xlSortOnValues, Order:=xlAscending, _ 
        DataOption :=xlSortNormal 
     .Add Key :=sh.Range("A9:A308"), SortOn:=xlSortOnValues, Order:=xlAscending, _ 
        DataOption :=xlSortNormal 
    end with 
    .SetRange sh.Range("A9:AE308") 
    .Header = xlGuess 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

set Sh=nothing 
+0

Brilliantr. Спасибо за быстрый ответ. Я африканец, я не написал код - hust запустил sorksheet, поэтому не уверен, что это неуказанные листы для диапазонов (мое знание кода vba является, по меньшей мере, наименее!). Я дам приведенный выше код попробовать и посмотрю, что произойдет ... – user3335033

0

Следующие должны работать. Я предполагаю, что они добавили новую функцию сортировки в Excel 2007

With ActiveWorkbook.Worksheets("Competitor & Class Entry") 
    .Range("A9:AE308").Sort Key1:=.Range(ClassRange1), Order1:=xlAscending, Key2:=.Range(_ 
     "A9:A308"), Order2:=xlAscending, Header:=xlGuess, _ 
     OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ 
     DataOption1:=xlSortNormal, DataOption2:=xlSortNormal 
End With 
Смежные вопросы