2014-11-28 2 views
0

Я использую Excel 2013 & Я собираю макрос для автоматизации копирования/вставки фактических данных в несколько листов (один лист на сайт, ~ 80 нечетные сайты, в книге также есть ряд других листов, которые я не хочу касаться) от E6: E157 до столбца справа (этот столбец зависит от того, за какой месяц данные данные). У меня есть код для бита copy/paste (см. Ниже), но я не могу заставить его проходить через листы.Как я могу пройти через (конкретный) список рабочих листов

Dim month As Integer 

month = Sheets("Group Incl Others").Range("b2") 
    Sheets("Group Incl Others").Select 
    Range("e6:e157").Select 
    Selection.Copy 
    ActiveCell.Offset(0, (13 + month)).Range("A1").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 

То, что я хотел бы сделать, это предоставить макрос со списком листов для работы через (либо в скрытом листе или в самом коде) & это шаг по списку, делающего копию & пасты. Это (справедливый) статический список листов & будет меняться только при приобретении новых сайтов. Помимо первого листа, который я хочу обработать (Group Incl Others), листы находятся в смежной группе.

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

ответ

0

Поместите список рабочих листов, которые необходимо отредактировать на каком-либо листе (не имеет значения, какие, скрытые или нет), а затем выберите имена рабочих листов (а не метку столбца, если вы поместили заголовок в верхней части списка) и тип листов2Bedited в поле имени слева от строки формулы hte. Это создаст именованный диапазон: sheets2Bedited, который будет использоваться в следующем макросе.

Dim mnth As Long, rWS As Range, ws0 As Worksheet 
mnth= Sheets("Group Incl Others").Range("b2").Value 
For Each rWS In Range("sheets2Bedited") 
    With Sheets(rWS.Value) 
     'either like this 
     .Range("e6:e157").Offset(0, 13 + mnth) = _ 
      Sheets("Group Incl Others").Range("e6:e157").Value 
     'or like this 
     '.Range("e6:e157").Offset(0, 13 + mnth) = _ 
      .Range("e6:e157").Value 
    End With 
Next rWS 

Я не мог читать из вашего кода, что вы на самом деле хотели использовать в качестве источника и целей на Copy, Paste Special, значение операции, поэтому я предложил два варианта.

+0

Спасибо, я дам это вращение. Источник - это диапазон e6: e157 на каждом листе, а цель - 14-25 столбцов справа (апрель - месяц 1 в нашем отчетном году и, следовательно, 14 столбцов справа, май - месяц 2 и 15 столбцов справа , и т. д.), поэтому, вероятно, это будет второй вариант. Лист «Group incl others» просто является первым листом, который нужно отредактировать. – PaulJ

+0

@PaulJ - Ты прав. Это должен был быть второй вариант. Если * mnth * в B2 изменится для каждого листа, то это должно быть перемещено внутри 'With ... End With' и изменено на' mnth = .Range ("b2"). Value'. – Jeeped

+0

Он подходит с «индексом вне диапазона» на битах With Sheets (rWS.Value). – PaulJ