2013-08-07 2 views
0

Интересно, сможет ли кто-нибудь помочь мне.VBA Copy IF Value Equals

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

Чтобы дать немного фона:

То, что я пытаюсь сделать, это выполнить проверку, когда код выглядит в списке проектов на листе «ALLDATA» (Источник) листа, начиная с ячейки Е3 , и копирует ячейку, если она содержит текстовое значение «Улучшения» и вставляет это в лист «Улучшения» («Назначение»).

Кроме того, код также отображает фигуру и дату «Actuals», связанные с каждым проектом, и суммирует человеко-часы по проекту и по периоду в соответствующие ячейки на листе назначения (лист улучшений). Это переменные «RVal» и «RDate».

Пересмотренный Кодекс - Полный Рабочий скрипт

Sub Extract() 
    Dim i As Long, j As Long, m As Long 
    Dim strProject As String 
    Dim RDate As Date 
    Dim RVal As Single 
    Dim BlnProjExists As Boolean 
    With Sheets("Enhancements").Range("B3") 
    For i = 1 To .CurrentRegion.Rows.Count - 1 
     For j = 0 To 13 
      .Offset(i, j) = "" 
     Next j 
    Next i 
End With 
With Sheets("AllData").Range("E3") 
    For i = 1 To .CurrentRegion.Rows.Count - 1 
    strProject = .Offset(i, 0) 
    If InStr(strProject, "Enhancements") = 0 Then 
     GoTo NextLoop 
    End If 
     RDate = .Offset(i, 3) 
     RVal = .Offset(i, 4) 
     With Sheets("Enhancements").Range("B3") 
      If .CurrentRegion.Rows.Count = 1 Then 
       .Offset(1, 0) = strProject 
       j = 1 
      Else 
       BlnProjExists = False 
       For j = 1 To .CurrentRegion.Rows.Count - 1 
        If .Offset(j, 0) = strProject Then 
         BlnProjExists = True 
         Exit For 
        End If 
       Next j 
       If BlnProjExists = False Then 
.Offset(j, 0) = strProject 
       End If 
      End If 
      Select Case Format(RDate, "mmm yy") 
       Case "Apr 13" 
        m = 1 
       Case "May 13" 
        m = 2 
       Case "Jun 13" 
        m = 3 
       Case "Jul 13" 
        m = 4 
       Case "Aug 13" 
        m = 5 
       Case "Sep 13" 
        m = 6 
       Case "Oct 13" 
        m = 7 
       Case "Nov 13" 
        m = 8 
       Case "Dec 13" 
        m = 9 
       Case "Jan 14" 
        m = 10 
       Case "Feb 14" 
        m = 11 
       Case "Mar 14" 
        m = 12 
      End Select 
      .Offset(j, m) = .Offset(j, m) + RVal 
     End With 
NextLoop: 
    Next i 
End With 
End Sub 

К сожалению, когда я пытаюсь запустить это я получаю «Ошибка компиляции: Label не определен» ошибка, и отлаживать выделяет следующую строку в качестве проблемы и Я не уверен, почему:

GoTo Nexti 

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

Если это помогает, я могу предоставить ссылку на свой тестовый файл.

Большое спасибо и добрые пожелания

ответ

0

Вы ничего не делаете по-другому, когда значение «Улучшение». Изменить это:

If InStr(.Offset(i, 0), "Enhancements") > 0 Then 
     strProject = .Offset(i, 0) 
    End If 

к этому:

If InStr(strProject, "Enhancements") = 0 Then 
     GoTo NextLoop 
    End If 

и добавить идентификатор NextLoop до "Далее я":

 End With 
NextLoop: 
    Next i 
End With 
End Sub 
+0

Привет @ Джо, спасибо большое за то время ответьте на мой пост. Я внесла поправки в код, как вы предложили, поэтому пересмотренный полный скрипт показан так же, как и в моем оригинале. Это, безусловно, отсортировано по сообщению об ошибке, но, к сожалению, ничего не скопировано на лист «Destination». Большое спасибо и добрые пожелания – IRHM

+0

Ваш текущий код отсутствует 'strProject = .Offset (i, 0)' above 'If Instr ....'. – Joe

+0

Hi @Joe большое вам спасибо за то, что нашли время, чтобы ответить на мой пост и решение, оно отлично работает. Все лучшие и добрые пожелания. – IRHM