#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 между ними. Просто нажмите на верхнюю стрелку. Спасибо Скотти.