Автоматизировать VBA Excel maco - PullRequest
1 голос
/ 22 февраля 2012

Я не очень хорош в этом, поэтому я обычно добавлял эти правила вручную, потому что те работали только для заполненных ячеек.

Есть ли способ автоматизировать это?Спасибо.

Range("D22:G22").Select

    Selection.AutoFill Destination:=Range("D22:G23"), Type:=xlFillDefault

    Range("D22:G23").Select

    Range("I22").Select

    Selection.AutoFill Destination:=Range("I22:I23"), Type:=xlFillDefault

    Range("I22:I23").Select

    Range("M22:N22").Select

    Selection.AutoFill Destination:=Range("M22:N23"), Type:=xlFillDefault

    Range("M22:N23").Select

    Sheets("BN1").Select

    Range("C20:G20").Select

    Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault

    Range("C20:G21").Select

    Range("K20:L20").Select

    Selection.AutoFill Destination:=Range("K20:L21"), Type:=xlFillDefault

    Range("K20:L21").Select

    Sheets("BUM1").Select

    Range("C20:G20").Select

    Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault

    Range("C20:G21").Select

    Range("K20:L20").Select

    Selection.AutoFill Destination:=Range("K20:L21"), Type:=xlFillDefault

    Range("K20:L21").Select

    Sheets("Express").Select

    Range("C20:G20").Select

    Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault

    Range("C20:G21").Select

    Range("K20:L20").Select

    Selection.AutoFill Destination:=Range("K20:L21"), Type:=xlFillDefault

    Range("K20:L21").Select

    Sheets("DL1").Select

    Range("C20:G20").Select

    Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault

1 Ответ

4 голосов
/ 22 февраля 2012

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

Рассмотрим ваши последние несколько утверждений.

Sheets("Express").Select
Range("C20:G20").Select
Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault
Range("C20:G21").Select
Range("K20:L20").Select
Selection.AutoFill Destination:=Range("K20:L21"), Type:=xlFillDefault
Range("K20:L21").Select
Sheets("DL1").Select
Range("C20:G20").Select
Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault 

Я могу заменить эти утверждения на:

With Sheets("Express")
  .Range("C20:G20").AutoFill Destination:=.Range("C20:G21"), Type:=xlFillDefault
  .Range("K20:L20").AutoFill Destination:=.Range("K20:L21"), Type:=xlFillDefault
End With
With Sheets("DL1")
  .Range("C20:G20").AutoFill Destination:=.Range("C20:G21"), Type:=xlFillDefault
End With

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

Рассмотрим:

With Sheets("Express")
  .Range("C20:G20").AutoFill Destination:=.Range("C20:G21"), Type:=xlFillDefault
  .Range("K20:L20").AutoFill Destination:=.Range("K20:L21"), Type:=xlFillDefault
End With

With говорит, что я хочу Sheets ("Экспресс ") добавляется в начало всего, что начинается с точки до End With.

Так что эти четыре строки точно такие же, как:

  Sheets("Express").Range("C20:G20").AutoFill Destination:=Sheets("Express").Range("C20:G21"), Type:=xlFillDefault
  Sheets("Express").Range("K20:L20").AutoFill Destination:=Sheets("Express").Range("K20:L21"), Type:=xlFillDefault

Рассмотрим:

Sheets("Express").Select
Range("C20:G20").Select
Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault
Range("C20:G21").Select

Записывающее устройство для макросов записывало каждый шаг по мере его выполнения.Вы переключились на лист «Экспресс», вы выбрали диапазон C20: G20, а затем скопировали этот диапазон вниз по строке.

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

Синтаксис метода автозаполнения:

SourceRange .AutoFill Destination: = DestinationRange , Тип: = Тип

Таким образом, можно включить все параметры в одну строку, как у меня.

Учтите:

Type:=xlFillDefault

Макро-рекордер имеетустановите тип на xlFillDefault, что говорит компилятору угадать требуемый тип заполнения, просматривая исходные данные.Посмотрите автозаполнение в справке VB, и вы получите список всех типов заполнения.Выберите тот, который вы хотите.

Резюме

Это уровень детализации, который вы искали?При необходимости вернитесь с дополнительными вопросами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...