2013-03-15 3 views
1

У меня есть книга, которая разбивается на одну страницу = один месяц в году. на каждом из этих листов представляет собой таблицу с различным условным форматированием на ней. оттуда я отфильтровываю информацию несколькими способами для получения определенных бит информации (непогашенные остатки, элементы, ожидающие отправки и т. Д.)Использование одного макроса в нескольких таблицах на нескольких листах

Я пытаюсь настроить несколько простых макросов, чтобы сделать фильтрацию быстрее, например, показать только заказы от определенной компании, которые были отправлены, но не оплачены.

Моя проблема заключается в том, что макрос применяется только к листу/таблице, на котором я его создал, можно ли изменить код vb, чтобы макрос работал на всех листах/таблицах моей рабочей книги?

Это пример одного из макросов, извините, если есть протокол для ввода кода на этом форуме, я умоляю невежество.

Sub HSWC_only() 
' 
' HSWC_only Macro 
' leaves only hi-spec jobs 
' 
' Keyboard Shortcut: Ctrl+m 
' 
    ActiveSheet.ListObjects("Table25").Range.AutoFilter Field:=3, Criteria1:= _ 
     "=HSWC*", Operator:=xlAnd 
End Sub 

ответ

0

Ключ вы ищете это ActiveSheet, это сейчас применяется Автофильтр только к листу вы видите перед вами. Если вы измените объект, который вы можете связать с каждым листом, вы можете применить его к каждому листу по порядку.

Теперь, когда ваши листы имеют только один список, вы можете ссылаться на первый объект ListObject вместо его имени.

Если бы поместить строку в Loop, как это:

Sub HSWC_only() 
' 
'HSWC_only Macro 
' leaves only hi-spec jobs 
' 
' Keyboard Shortcut: Ctrl+m 
' 
    Dim ws as Worksheet 

    For each ws in ThisWorkbook.Worksheets 
     ws.ListObjects(1).Range.AutoFilter Field:=3, Criteria1:= _ 
      "=HSWC*", Operator:=xlAnd 
    Next ws 
End Sub 
+0

Привет, спасибо за ваше время. Я вставил код, который вы предложили, но затем обнаружил, что макрос не работает вообще, и появляется «ошибка времени выполнения 9-supscript вне диапазона» , который это та же самая ошибка, которую он поднимал на листах, отличных от листа, где был создан макрос, прежде чем я перепутал его. –

+0

Практически там. У вас должен быть лист без списков. –

+0

Если у него нет объектов списка, он вызывает ошибки в диапазонах данных :( –

0

Похоже, ваш макрос должен сделать это, так как он относится к ActiveSheet, поэтому он должен работать на любом листе вы находитесь в данный момент.

Если это не так это из-за ListObjects("Table25").Range ссылки - Вы можете захотеть изменить что-то вдоль линий UsedRange

Ваш код будет выглядеть примерно вдоль линий:

ActiveSheet.UsedRange.AutoFilter Field:=3, Criteria1:= _ 
    "=HSWC*", Operator:=xlAnd 

Не видя ваших листов/макетов, это самое близкое, что я могу предложить для решения.

Надеюсь, это поможет.

+0

Привет, спасибо, что нашли время, чтобы помочь мне :) к сожалению это не сработало .. до того, как я попытался запустить макрос на другом листе, он вернулся с «ошибкой времени выполнения 9-индекс за пределами диапазона» после внесения изменений, которые вы предположили, что он вообще не работает, и вернулся с ошибкой 1004 autofilter method out of range class failed ' –

+0

** HOPING ** у вас есть только одна таблица на странице - Попробуйте 'ActiveSheet.ListObjects (1) .Range.Autofilter ...' –

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