2016-07-15 11 views
0

У меня есть лист данных, который заполняет другие рабочие листы в файле на основе расширенного фильтра, который я создал. Мне нужно только скопировать определенные столбцы из расширенного фильтра, а не весь фильтр, в зависимости от желаемого отчета. Когда расширенный фильтр ничего не возвращает (в этом месяце нет совпадений), скрипт копирует и вставляет заголовок вместо копирования и вставки ничего. Любые предложения о том, как избежать копирования и вставки заголовка, когда расширенный фильтр не возвращает результатов? Вот сценарий для первого листа, который копируется:Excel VBA скрипт копирования и вставки с использованием динамического диапазона

Sub Populate() 

Dim sht As Worksheet 
Dim LastRow As Long 
Dim LastColumn As Long 
Dim StartCell As Range 

Set sht = Worksheets("Data") 


sht.Range("A1:S400").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ 
    Sheets("Sheet1").Range("A1:S12"), Unique:=False 


Set StartCell = sht.Range("G2") 
LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row 
LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column 

    sht.Range(StartCell, sht.Cells(LastRow, "M")).Copy 
    Worksheets("OC 2016 - Post-65").Range("A18").PasteSpecial Paste:=xlPasteValues 


Sheet3.Columns().AutoFit 
Application.CutCopyMode = False 
+2

'If LastRow> 2 then' и вы делаете. Не забывайте «End If» –

+0

Спасибо Скотту, это было недостающее звено. Я заработал. – workswoop

ответ

0

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

Sub Populate() 

Dim sht As Worksheet 
Dim LastRow As Long 
Dim LastColumn As Long 
Dim StartCell As Range 

Set sht = Worksheets("Data") 


sht.Range("A1:S400").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ 
Sheets("Sheet1").Range("A1:S12"), Unique:=False 


Set StartCell = sht.Range("G2") 
LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row 
LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column 

If LastRow > 2 Then 

sht.Range(StartCell, sht.Cells(LastRow, "M")).Copy 
Worksheets("OC 2016 - Post-65").Range("A18").PasteSpecial Paste:=xlPasteValues 

End If 

Sheet3.Columns().AutoFit 
Application.CutCopyMode = False