2016-02-29 3 views
1

Я делаю макрос VBA. В какой-то момент макрос сообщает excel об изменении текущего автофильтра, чтобы сортировка автофильтра находилась в столбце в Column A, и он должен быть восходящим.Автофильтр сортировать по VBA

Но в коде VBA, который у меня есть, указано, что RANGE жестко закодирован, который равен Range(A1:A655), потому что код был записан в записанном Макро. Ниже приведен код VBA. Можете ли вы сказать мне, как изменить A1:A655 не жестко закодированы способом, вместо того, чтобы сделать это только в общем средний «делают диапазон быть все строки в этом столбце, сколько есть?

ActiveWorkbook.Worksheets("A1").AutoFilter.Sort.SortFields.Add Key:=Range(
     "A1:A655"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= 
     xlSortTextAsNumbers 
+0

Извините, я должен был написать более четко ... Я должен был сказать, что в коде теперь указывается диапазон KEY, который будет жестко закодирован A1: A655. Аргумент KEY - это тот, который меня интересует. – estephan500

+0

И я очень сожалею, что добавил еще здесь ... Мне также нужен в основном тот же вопрос, который ответил на эту другую команду VBA, которая не является фильтром FILTER. Эта команда мне также нужна, чтобы удалить «жестко закодированный диапазон» из следующего ... какие-либо советы по этому поводу? ActiveSheet.Range («$ A $ 1: $ EK $ 655»). Поле AutoFilter: = 36, Criteria1: = «1» – estephan500

ответ

1

Попробуйте не полагаться на ActiveSheet property. вы должны знать, что рабочий лист вы на и явно ссылаться на него в рабочем листе .CodeName Worksheet .Name свойства.

Я считаю, ты перепутал Worksheet Object с Range object. То есть, если вы на самом деле иметь листок под названием A1, что кажется маловероятным.

Range.CurrentRegion property - отличный способ ссылки на непрерывный блок ячеек, излучающих A1. Он продолжается вниз и направо, пока не встретит полностью пустой и полностью пустой столб. Одиночные или небольшие группы промежуточных пустых ячеек не прерывают его ссылки на блок ячеек.

With ActiveWorkbook 
     With .Worksheets("Sheet1") 
      If .AutoFilterMode Then .AutoFilterMode = False 
      With .Cells(1, 1).CurrentRegion 
       .Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _ 
          Orientation:=xlTopToBottom, Header:=xlYes 
       With .Resize(.Rows.Count, 141) '<~~ A:EK 
        .AutoFilter Field:=36, Criteria1:=1 

        'the CurrentRegion is sorted on column A and filtered 
        'on column AJ 

       End With 
      End With 
     End With 
    End With 

Вложенные With ... End With statement s progessively определяет блок ячеек, которые вы хотите сослаться.

Я считаю, что вам лучше с обычным Range.Sort method. Это более прямолинейно, чем .AutoFilter.Sort. Последующий AutoFilter method завершает операцию.

+0

большое спасибо за это, все еще переваривая ... – estephan500

+0

также как и в сторону ... на самом деле мой В рабочей книге есть рабочий лист A1! также A2, A3 и B1, B2, C1, D1 ... благодаря характеру моей работы. Смешное совпадение, которое, вероятно, будет путать вещи не раз! :) – estephan500

+0

Да, казалось, что вы поставляете рабочий код, но я не мог примирить ** ** ** ссылку; не беспокойтесь, пока вы держите их прямо. В будущих вопросах это может быть идея конкретно упомянуть об этом, или вы можете получить сомнительные интерпретации, такие как мои собственные. – Jeeped

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