Заполнение столбцов из значений ячеек на каждом листе

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

Этот код работает должным образом с одним листом:

Sub Formatting_one()

   Range("A12").Value = Range("M6").Value
   Range("A12:A" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown

End Sub

Затем я начал пробовать то же самое, но с циклическим просмотром листов. Вот в чем я застрял. Вот мой код для этого:

Sub Formatting_many()

    Dim ws As Worksheet

    For Each ws In ActiveWorkbook.Worksheets
        ws.[A1].Resize(, 6).EntireColumn.Insert

        ws.Range("A12").Value = ws.Range("M6").Value
        ws.Range("A12:A" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown

        ws.Range("B12").Value = ws.Range("M7").Value
        ws.Range("B12:B" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown

        ws.Range("C12").Value = ws.Range("M8").Value
        ws.Range("C12:C" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown

        ws.Range("D12").Value = ws.Range("I5").Value
        ws.Range("D12:D" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown

        ws.Range("E12").Value = ws.Range("I4").Value
        ws.Range("E12:E" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown

        ws.Range("F12").Value = ws.Range("I6").Value
        ws.Range("F12:F" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown

        ws.Range("G12").Value = ws.Range("I7").Value
        ws.Range("G12:G" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown

    Next ws

End Sub

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


person MrRarri    schedule 15.11.2018    source источник
comment
В Cells(Rows.Count, 7).End(xlUp).Row вам нужно указать рабочий лист: ws.Cells(ws.Rows.Count, 7).End(xlUp).Row Также обратите внимание, что 7 означает столбец G. Убедитесь, что это правильный столбец для поиска последней использованной строки.   -  person Pᴇʜ    schedule 15.11.2018
comment
Да, я тестировал это, но я думаю, что Excel понимает ссылку между Range (), поскольку она ничего не меняет, помещаю я спецификацию листа или нет. Все еще та же проблема! Строки все равны, 7 было случайным, на всякий случай я удалю что-то при форматировании своих листов: p   -  person MrRarri    schedule 15.11.2018


Ответы (1)


Проблема …

… Поиск последней использованной строки в столбце G

Cells(Rows.Count, 7).End(xlUp).Row

Но поскольку вы добавили 6 столбцов с ws.[A1].Resize(, 6).EntireColumn.Insert, столбец G теперь пуст, поэтому последняя использованная строка - 1.

и ты действительно бежишь

ws.Range("A12:A1").FillDown

который берет пустую ячейку из A1 и заполняет ее до A12 (поэтому ваше вставленное значение в A12 удаляется).


Решение

После вставки исходного столбца G переместился в

ws.Cells(ws.Rows.Count, 7 + 6).End(xlUp).Row
person Pᴇʜ    schedule 15.11.2018
comment
Только что понял, что вы объясняли. Спасибо большое, теперь все работает. Я тоже укажу свои рабочие листы! Спасибо за совет. - person MrRarri; 15.11.2018