2015-09-01 3 views
0

Я написал код, который импортирует некоторые строки из другого листа, если только первая ячейка содержит «X». Проблема в том, что он просто применяется для первых строк (например: он импортирует строки 101 & 102, даже если он не содержит «X» в первой ячейке). Может ли кто-нибудь обнаружить ошибку в коде ниже?Ошибка импорта с другого листа

Public Sub refresh() 
' 
' refresh Macro 
' 
' Touche de raccourci du clavier: Ctrl+y 
' 
Dim ws1 As Worksheet, ws2 As Worksheet, lr1 As Long, lRow As Long 

    Set ws1 = ThisWorkbook.Worksheets("Scénarios de menace") 
    Set ws2 = ThisWorkbook.Worksheets("Analyse de risque") 
    Application.Calculation = xlCalculationAutomatic 

    ws2.Range("B6:AP" & ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Row).Clear 
    lr1 = ws1.Cells(ws1.Rows.Count, 2).End(xlUp).Row 
    Sheets("Scénarios de menace").Select 
    Range("B4:Z398").Select 
    Selection.Copy 
    Sheets("Analyse de risque").Select 
    Range("B6:Z400").Select 
    ActiveSheet.Paste 


     ws1.Range("A1:A" & lr1).AutoFilter Field:=1, Criteria1:="x" 
     ws1.Range("B3:AP" & lr1).SpecialCells(xlCellTypeVisible).Copy 

     ws2.Range("B6").PasteSpecial Paste:=xlPasteValuesAndNumberFormats 
     ws1.Range("A6:A" & lr1).AutoFilter 
     ws2.Activate: ws2.Cells(1, 1).Activate 
End Sub 
+0

импортирует мне нужные столбцы и добавить другие под ними. – Souma

ответ

0

Может быть, этот код поможет вам:

Public Sub Test() 
    Dim intLastCell As Integer 
    Dim wsTable1 As Worksheet 
    Dim wsTable2 As Worksheet 

    'Worksheets 
    Set wsTable1 = ThisWorkbook.Worksheets(2) 
    Set wsTable2 = ThisWorkbook.Worksheets(3) 

    'Check if Autofilter is on 
    If wsTable1.AutoFilterMode = True Then 
     wsTable1.AutoFilterMode = False 
    End If 

    'Search for last cell on column 'B' 
    intLastCell = wsTable1.Cells(Rows.Count, 2).End(xlUp).Row 

    'Apply autofilter 
    wsTable1.Range("A1:B" & intLastCell).AutoFilter Field:=1, Criteria1:="x" 

    'Select and Copy the results 
    Range("A1:B" & intLastCell).Select 
    Selection.Copy 

    'Activate the second table and paste the results 
    wsTable2.Activate 
    Cells(1, 1).Select 
    ActiveSheet.Paste 

    'Disable autofilter 
    wsTable1.AutoFilterMode = False 
End Sub 
+0

Спасибо, Cryxon за ваш ответ. Но я нашел ошибку. Сначала я хотел вставить формат ячеек, чтобы он вставлял ровные строки, затем я фильтрую и отталкиваю. Поэтому, когда я снова вставляю результат после фильтрации, он просто разбивает первые строки и сохраняет последние в неприкосновенности. У вас есть идея, как я могу просто вставить формат ячейки без текста. – Souma