РЕДАКТИРОВАТЬ: я вставил некоторые пересмотренный код ниже в разделе Sub (Copyinternal).Все еще не работает, но, возможно, я на правильном пути?
У меня есть рабочая книга с 6 вкладками.Листы настраиваются следующим образом:
- Органы управления
- Прогноз
- Финансовое обновление
- Цели Совета
- Внутренний календарь
- Внешний календарь
Листы 2-4 содержат таблицы данных, которые я хотел бы отфильтровать двумя различными способами и скопировать / вставить в обе вкладки 5 и 6 без перезаписи.Листы 5 и 6 содержат заголовки в строке 1, которые я хотел бы сохранить.
Попытка:
- Сначала удалите любую существующую информацию на листе «Внутренний календарь» и «Внешний календарь»лист со строки 2 вниз без удаления заголовков.
- На листе «Прогноз» отфильтруйте столбец H для выбора «Оба» и «Внутренний», а затем скопируйте / вставьте эту информацию в лист «Внутренний календарь», начиная сстолбец C. Затем я пытаюсь сделать то же самое для листов «Финансовое обновление» и «Цели Совета», но скопируйте / вставьте отфильтрованную информацию после содержимого, уже вставленного во «Внутренний календарь», чтобы не перезаписывать информацию.
- Повторите шаг 2, за исключением фильтра H для «Оба» и «Внешний», а также «Скопируйте / вставьте отфильтрованную информацию в« Внешний календарь », начиная со столбца С.
- Элемент управления можно игнорировать.
Цикл начинает работать правильно, только если я запускаю макрос, когда мой активный лист находится в режиме «Прогноз», но затем он останавливается после вставки этих данных ине перемещается на следующие два листа.Я также не совсем уверен, что существующий у меня код идентифицирует первую пустую строку для добавления данных на листах назначения.
Я довольно новичок в использовании VBA, поэтому руководство в правильном направлении поможеточень ценим.
Sub CalendarAutomation()
ClearSheets
CopyInternal
CopyExternal
End Sub
Sub ClearSheets()
'Clear out Contents
Sheets("Internal Calendar").Select
activesheet.Range("C2:G250").Select
Selection.ClearContents
Sheets("External Calendar").Select
Range("C2:G250").Select
Selection.ClearContents
End Sub
Sub CopyInternal()
Dim ws As Variant
Dim starting_ws As Worksheet
Dim ending_ws As Worksheet
Dim rng As range
Set starting_ws = ThisWorkbook.Worksheets("Forecast")
Set ending_ws = ThisWorkbook.Worksheets("Internal Calendar")
Set rng = ActiveRange
For ws = 2 To 4
If Selection.AutoFilter = OFF Then Selection.AutoFilter
ws.rng.AutoFilter Field:=6, Criteria1:="=Both", _
Operator:=xlOr, Criteria2:="=Internal"
UsedRange.Copy
ending_ws.range(Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row).Paste
Next ws
End Sub
Sub CopyExternal()
Dim ws As Worksheet
Dim unusedRow As Long
For Each ws In ThisWorkbook.Worksheets
If Not ws.Name = "Controls" _
And Not ws.Name = "Internal Calendar" _
And Not ws.Name = "External Calendar" Then
Range("$C$3:$H$14").AutoFilter Field:=6, Criteria1:="=Both", _
Operator:=xlOr, Criteria2:="=External"
Range("C4:G14").Select
Selection.Copy
Sheets("External Calendar").Select
activesheet.Paste
unusedRow = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row
End If
Next ws
End Sub