Код VBA для выбора значения фильтра из выпадающего меню на одном листе и применения фильтра в таблице на другом листе — Excel 2010

#excel #vba

#преуспеть #vba #excel

Вопрос:

Очень новичок, пытаюсь написать код VBA в EXcel 2010 для выбора значения фильтра из выпадающего списка, расположенного в ячейке A1 листа 1, и применения значения фильтра к столбцу 4 диапазона данных A7: S1000, расположенного на листе 2. Ниже приведен код, вставленный в Sheet1, который я использую, но ничего не возвращаю. Где я ошибаюсь? Большое спасибо.

 Private Sub Worksheet_Change(ByVal Target As Range)
    ' Cell with dropdown where value to be selected
    Const DropDown = "a1"
    ' Sheet with data range to apply filter
    Const TableSheet = "Sheet2"
    ' Top left cell of the data range
    Const TableRange = "a7"
    If Not Intersect(Range(DropDown), Target) Is Nothing Then
        Application.EnableEvents = False
        If Range(DropDown).Value = "" Then
            Worksheets(TableSheet).ShowAllData
        Else
            Worksheets(TableSheet).Range(TableRange).AutoFilter _
                Field:=4, Criteria1:=Range(DropDown).Value
        End If
        Application.EnableEvents = True
    End If End Sub
  

Комментарии:

1. Попробуйте удалить ‘Application. Строка EnableEvents = False’ и посмотрите, имеет ли это значение.

2. @kevin9999. Спасибо. Пытался удалить приложение. Строка EnableEvents = False’, разницы нет.

Ответ №1:

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

Кроме того, возможной причиной вашей проблемы может быть то, что фильтр не смог найти никаких значений, соответствующих вашим критериям. Я добавил в ваш код тест, который сообщит вам, не удается ли найти подходящие значения.

Дайте мне знать, как это происходит, и если это работает, пожалуйста, обновите ответ.

 Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Range("A1"), Target) Is Nothing Then
 
    If Range("A1").Value = "" Then
        
    Worksheets("Sheet2").ShowAllData
    
    Else
    
        If Application.WorksheetFunction.CountIf(Worksheets("Sheet2").Range("D:D"), Range("A1")) = 0 Then
        
            MsgBox "The Filtered value doesn't exist in column D on sheet 2"
            
            Exit Sub
        
        End If
    
    Worksheets("Sheet2").Range("A7:S7").AutoFilter Field:=4, Criteria1:=Range("A1").Value
    
    End If
    
End If
  
End Sub
  

Комментарии:

1. @Scottyfrog пожалуйста, сообщите, работает ли предоставленный код или нет.

2. Точки доступа для позднего ответа были в AL. да, код работает. Большое спасибо.

3. @Scottyfrog добро пожаловать, и, пожалуйста, «примите» ответ, присвоив ему значение «вверх». Приветствия 🙂

4. Как вы даете ответу повышение?

5. Слева от ответа вы увидите стрелки вверх и вниз с 0 между ними. Просто нажмите на верхнюю стрелку. Спасибо Скотти.