2016-08-12 5 views
1

В основном, что это такое, он проверяет каждую строку в ws2, где столбец = «Обновление», затем извлекает данные конкретного столбца и выдает его в соответствующую ячейку в ws1. в первый раз, когда это было реализовано, все прошло гладко, теперь по какой-то причине требуется немного времени, чтобы закончить.Excel VBA, для цикла игнорируют скрытые строки

Dim LastRow As Long, CurRow As Long, DestRow As Long, DestLast As Long 
Dim checkstatus As String 
Dim ws1 As Worksheet, ws2 As Worksheet 

Set ws1 = Sheets("Dashboard") 
Set ws2 = Sheets("TempHRI") 

LastRow = ws2.Range("B" & Rows.Count).End(xlUp).Row 
DestLast = ws1.Range("E" & Rows.Count).End(xlUp).Row 

For CurRow = 2 To LastRow 'Assumes first row has headers 
checkstatus = CStr(ws2.Range("AB" & CurRow).Value) 

If checkstatus = "UPDATE" Then 
'Column that looks up the word "Update" in ws2 
If Not ws1.Range("E15:E" & DestLast).Find(ws2.Range("B" & CurRow).Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then 
     DestRow = ws1.Range("E15:E" & DestLast).Find(ws2.Range("B" & CurRow).Value, LookIn:=xlValues, LookAt:=xlWhole).Row 
    End If 

    ws1.Range("I" & DestRow).Value = ws2.Range("F" & CurRow).Value 'assumes supervisor is in column C in both sheets 

End If 

Next CurRow 

Я хочу разместить фильтр в ws1 таким образом, я могу свести к минимуму количество строк, которые необходимо проверить. теперь я уверен, что код ниже НЕ ЯВЛЯЕТ скрытые строки. Мне нужна помощь в настройке кода, чтобы исключить скрытые строки при запуске цикла.

+0

Просто используйте Автофильтр на рабочем листе2, как показано [здесь] (http://stackoverflow.com/questions/11631363/how-to-copy-a-line-in-excel-using-a-specific-word-and-pasting-to-another- excel-s) a nd, тогда пропустите только этот диапазон –

ответ

3

Попробуйте проверить для .EntireRow.Hidden собственности:

For CurRow = 2 To LastRow 'Assumes first row has headers 
    ' DO something only if the row is NOT hidden 
    If ws1.Rows(CurRow).EntireRow.Hidden = False Then 
     checkstatus = CStr(ws2.Range("AB" & CurRow).Value) 

     If checkstatus = "UPDATE" Then 
     'Column that looks up the word "Update" in ws2 
     If Not ws1.Range("E15:E" & DestLast).Find(ws2.Range("B" & CurRow).Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then 
       DestRow = ws1.Range("E15:E" & DestLast).Find(ws2.Range("B" & CurRow).Value, LookIn:=xlValues, LookAt:=xlWhole).Row 
      End If 

      ws1.Range("I" & DestRow).Value = ws2.Range("F" & CurRow).Value 'assumes supervisor is in column C in both sheets 

     End If 
    End If 
Next CurRow 

Edit: добавлены после комментария ниже для ws2

For CurRow = 2 To LastRow 'Assumes first row has headers 
    ' DO something only if the row is NOT hidden 
    If ws1.Rows(CurRow).EntireRow.Hidden = False Then 
     ' Checking ws2 as well, for hidden rows 
     If ws2.Range("AB" & CurRow).EntireRow.Hidden = False Then 
      checkstatus = CStr(ws2.Range("AB" & CurRow).Value) 

      If checkstatus = "UPDATE" Then 
      'Column that looks up the word "Update" in ws2 
      If Not ws1.Range("E15:E" & DestLast).Find(ws2.Range("B" & CurRow).Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then 
        DestRow = ws1.Range("E15:E" & DestLast).Find(ws2.Range("B" & CurRow).Value, LookIn:=xlValues, LookAt:=xlWhole).Row 
       End If 

       ws1.Range("I" & DestRow).Value = ws2.Range("F" & CurRow).Value 'assumes supervisor is in column C in both sheets 

      End If 
     End If 
    End If 
Next CurRow 

Пожалуйста, попробуйте выше и посмотреть, если оно отвечает вашим потребностям

+0

привет спасибо за ответ. можем ли мы также сделать проверку на ws2 для скрытых строк? Благодарю. – wh3resmycar2

Смежные вопросы