2015-08-04 3 views
0

У меня есть следующий макрос, но когда я запускаю его для некоторых файлов с только заголовками и ничего ниже, я получаю сообщение об ошибке, потому что я изменил его, чтобы не включать заголовки.VBA, Advanced Filter not working w/Blank Sheets

Есть ли способ обхода, чтобы, возможно, заполнить 'N/A' вместо получения этой ошибки? Любые коды, которые я мог бы использовать, чтобы поместить N/A в определенные столбцы, где они пустые по всей книге? или любые идеи?

Sub GetUniqueValues() 




Dim wks As Excel.Worksheet 
Dim wksSummary As Excel.Worksheet 
'---------------------------------------------------------------------------------- 
'edited so it shows in the 3rd column row +1. Add the header and sheet name macro to this 

On Error Resume Next 
Set wksSummary = Excel.ActiveWorkbook.Worksheets("Unique data") 
On Error GoTo 0 

If wksSummary Is Nothing Then 
    Set wksSummary = Excel.ActiveWorkbook.Worksheets.Add 
    wksSummary.Name = "Unique data" 
End If 


'Iterate through all the worksheets, but skip [Summary] worksheet. 
For Each wks In Excel.ActiveWorkbook.Worksheets 

    With wksSummary 

     If wks.Name <> .Name Then 
      If Application.WorksheetFunction.CountA(wks.Range("C:C")) Then 
       Dim r As Range 

    ' Get the first cell of our destination range... 
    Set r = .Cells(.Cells(.Rows.Count, 3).End(xlUp).Row + 1, 3) 

    ' Perform the unique copy... 
    wks.Range("C:C").AdvancedFilter xlFilterCopy, , r, True 

    ' Remove the first cell at the destination range... 
    r.Delete xlShiftUp 
      End If 
     End If 

    End With 

Next wks 


'Headers 
Range("A1").Value = "File Name " 
Range("B1").Value = "Sheet Name " 
Range("C1").Value = "Column Name" 

     Dim intRow As Long: intRow = 2 

    For i = 1 To Sheets.Count 
If Sheets(i).Name <> ActiveSheet.Name Then 
    Cells(intRow, 2) = Sheets(i).Name 
    Cells(intRow, 1) = ActiveWorkbook.Name 
    intRow = intRow + 1 
End If 
    Next i 




    End Sub 
+0

Использование другого 'Если WorksheetFunction.CountA (.Range ("C: C"))' –

+0

@MacroMan, благодаря макро мужчина, Можете ли вы указать, где я могу это использовать? Я довольно newb когда дело доходит до макросов – Jonathan

ответ

1

Заменить

wks.Range("C:C").AdvancedFilter xlFilterCopy, , r, True 

с:

If WorksheetFunction.CountA(wks.Range("C:C")) > 1 Then 
    wks.Range("C:C").AdvancedFilter xlFilterCopy, , r, True 
End If 
+0

спасибо alot macroman! – Jonathan