Excel VBA циклически перемещается по нескольким листам

Начальник VBA здесь, у меня есть небольшая проблема с программой, над которой я работаю.

Мне нужно скопировать данные из последней ячейки в столбце B с первого листа и вставить его в столбец A на другом листе xws и повторить эту операцию для пяти других рабочих листов с данными.

Вот код, он не работает так, как он должен:

Sub exercise() Dim ws As Worksheet Dim rng As Range 'Finding last row in column B Set rng = Range("B" & Rows.Count).End(xlUp) For Each ws In ActiveWorkbook.Worksheets 'Don't copy data from xws worksheet If ws.Name  "xws" Then 'Storing first copied data in A1 If IsEmpty(Sheets("xws").[A1]) Then rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp) 'Storing next copied data below previously filled cell Else rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) End If End If Next ws End Sub 

Существует проблема с ws. ссылаясь, но всякий раз, когда я помещал его перед rng в операторы if или до диапазона (set rng = …), я получаю ошибки.

Спасибо заранее за любые указатели.

Вы должны объявлять rng для каждого ws внутри цикла, например:

 Sub exercise() Dim ws As Worksheet Dim rng As Range For Each ws In ActiveWorkbook.Worksheets 'Finding last row in column B Set rng = ws.Range("B" & ws.Rows.Count).End(xlUp) '<~~ Moved inside the loop 'Don't copy data from xws worksheet If ws.Name <> "xws" Then 'Storing first copied data in A1 If IsEmpty(Sheets("xws").[A1]) Then rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp) 'Storing next copied data below previously filled cell Else rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) End If End If Next ws End Sub 

Поскольку ваш код теперь, rng будет указывать на ActiveSheet во время запуска макроса, и ваш код будет копировать одну и ту же ячейку на каждой итерации кода.

  • Триггерный макрос с одним нажатием на конкретную ячейку
  • Ошибка Excel 1004 «Невозможно получить ... свойство classа WorksheetFunction», появляющееся непоследовательно
  • Excel vba: копировать строки, если данные соответствуют значениям в столбце на другом листе
  • Не удается VBA записывать данные в ячейки Excel 2007/2010 внутри функции
  • Удалить все повторяющиеся строки Excel vba
  • Как вы проверяете время работы кода VBA?
  • Excel можно заполнить две ячейки одной if-формулой
  • Как объединить значения из нескольких строк в одну строку с помощью модуля?
  • Как сделать переменные Excel VBA доступными для нескольких макросов?
  • Как дать задержку времени менее одной секунды в excel vba?
  • простой код vba дает мне переменную объекта времени выполнения 91 или с не установленным блоком
  • Давайте будем гением компьютера.