2014-10-03 2 views
1

Я супер новичок в VBA и надеюсь, что кто-то может помочь. Это то, что я до сих пор:VBA Excel 2013 Скопируйте определенную информацию с одного листа на рабочий лист пыльника - еженедельные отчеты

Public Sub Late() 

    Dim LastRow As Long 
    Dim MasterLastRow As Integer 
    Dim NewRange As Range 
    Dim TrackingCount As Integer 


    Worksheets("Master").Select 
    Range("A4").Select 

    LastRow = Cells(Rows.Count, 1).End(xlUp).Row 
    Set NewRange = Cells(LastRow + 1, 1) 
    Dim i As Integer 
    For i = 1 To LastRow 
     If TrackingCount > 14 Then 
      'Copy row, col. A:M of "Master" worksheet into Col. A:M of "Late Report" worksheet 
     End If 
    Next i 

Объяснение: Для каждого TrackingCount в Col Q «Мастер» листа, который является> 14, мне нужно скопировать только эти строки из столбцов A через M и вставить их в Лист «Late Report» (начиная с A: 3), одна строка за другой (для каждого из них с TrackingCount> 14).

Как только это будет выполнено, мне нужно сделать то же самое, когда счетчик отслеживания находится между 7 & 14 (для вставки в таблицу позднего отчета после первого отчета); затем между 2 & 6 для третьего отчета; и, наконец, когда = < 0 для окончательного отчета.

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

+0

Что вы держите в переменной «TrackingCount»? Он не назначается в примере, который вы показали. –

+0

Все ли диапазоны, идущие на одном листе, или есть ли другой лист для каждого диапазона значений? –

+0

Я держу количество дней, когда работа просрочена. –

ответ

0

Хорошо, давайте посмотрим, достаточно ли этого, чтобы вы начали.

Option Explicit 

Public Sub LateReport() 
Dim MasterSheet As Worksheet 
Dim DestinationSheet As Worksheet 
Dim workingCell As Range 
Dim workingRange As Range 
Dim DestinationRow As Integer 

Set MasterSheet = ThisWorkbook.Worksheets("Sheet1") ' You may want to correct the name 
Set DestinationSheet = ThisWorkbook.Worksheets("Sheet2") ' And for this as well 


Set workingRange = MasterSheet.Range("A4:M4").CurrentRegion ' Adjust this starting point as required 

For Each workingCell In workingRange.Columns(1).Cells ' We'll work our way down each cell in the first column 

    If workingCell.Offset(0, 16).Value > 14 Then ' The Offset method looks at the cell X rows and Y columns away; in our case, 0 rows down and 16 columns across 
     workingCell.Range(workingCell, workingCell.Offset(0, 20)).Copy ' Copy that row 
     DestinationSheet.Range("A3").Offset(DestinationRow, 0).PasteSpecial xlPasteValuesAndNumberFormats ' Paste it to our destination 
    End If 

    DestinationRow = DestinationRow + 1 

Next 

Set MasterSheet = Nothing 
Set DestinationSheet = Nothing 

End Sub 

Некоторые ключевые слова

Option Explicit является обязательным. Это гарантирует, что мы не получим неопределенных ошибок, если мы не объявили наши переменные правильно.

Следующая недвижимость CurrentRegion. Это выбирает все ячейки вокруг той, которую мы определили (в данном случае ячейки от A4 до M4), которые имеют значение. Это быстрый и простой способ просмотра и работы с блоком ячеек в коллекции.

Следующей задачей является адаптация этого кода для обработки случаев, когда значение в столбце «Q» находится между 7 и 14, между 2 и 6 и меньше или равно 1 (что я предполагаю, это опечатка в исходном вопросе: вы сказали «0»).

Удачи вам!

+0

Фил, большое вам спасибо! Я многому научился, и я почти там! Но после того, как он проходит через несколько итераций, я получаю сообщения об ошибках. Я внес различные изменений, но все же их отлаживают. Не могли бы вы взглянуть на файл, если бы я отправил вам его по электронной почте? –

+0

Почему бы и нет. Сегодня я чувствую себя достаточно сумасшедшим. Просмотрите мой профиль или посетите http://wheeler.kiwi.nz для получения контактной информации. –

+0

Ничего себе, очень хороший сайт. Вау! Но у вас есть частный адрес электронной почты, а не социальные сети? Я не видел ваш адрес электронной почты Google. –

0

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

Более эффективный способ запрограммировать это в первую

  • установить таблицу в Excel, используя команду "Insert> Table".
  • Затем с помощью данных> Фильтр для фильтрации всех строк, которые удовлетворяют требования
  • Затем скопируйте эти строки (или часть строки)

Если вы не знаете, как программировать это я рекомендую запись макроса , Также просмотрите Excel ListObject в VBA.