У меня есть код для фильтрации данных между двумя датами, когда этот код каждый раз пытается запустить, выдавая мне сообщение ошибка времени выполнения 13 несоответствие типа
Этот код находится на листе, а не в модуле
Sub BetweenDates() '(Filter data between 2 dates )
Dim sDate As Long
Dim EDate As Long
sDate = Range("B4").Value
EDate = Range("D4").Value
Range("c7:c80").AutoFilter 3, "> = " & sDate, xlAnd, "< = " & EDate
End Sub
Я не знаю, как это знать?
Какая строка выделяется, когда вы нажимаете «Отладка» после появления ошибки?
Нет, любая выделенная строка
Тогда, возможно, ошибка где-то еще. Какие настройки у вас есть в разделе VBeditor >> Инструменты >> Параметры >> вкладка Общие >> Перехват ошибок? Убедитесь, что для него установлено значение «Взлом в модуль класса», а затем повторите попытку.
попробуй Range("c7:c80").AutoFilter 3, "> = " & CDate(sDate), xlAnd, "< = " & CDate(EDate)
@TimWilliams После того, как я установил для перехвата ошибок значение «Перерыв в модуле класса», начните выделенную строку sDate = Range («B4»). Значение
Я могу воспроизвести эту ошибку, если диапазон B4 или D4 НЕ является датой.
У вас может быть текст или что-то еще в этих ячейках.
В ячейках B4 и D4 убедитесь, что числовой формат — «Общий» или «Дата», затем снова введите даты.
Редактировать:
Использование текстовых полей сделает его более сложным, поэтому подумайте, можете ли вы вместо этого использовать ячейки. Но если вам действительно нужно использовать текстовые поля:
Вместо
sDate = Range("B4").Value
EDate = Range("D4").Value
Вам нужно будет использовать:
sDate = DateValue(ActiveSheet.Shapes("TextBox 1").TextFrame.Characters.Text)
EDate = DateValue(ActiveSheet.Shapes("TextBox 2").TextFrame.Characters.Text)
и вам нужно будет заменить «TextBox 1», «TextBox 2» на любое имя ваших текстовых полей.
Если вы не знаете, как называются ваши текстовые поля, вы можете использовать следующее:
Sub list_shapes()
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
Debug.Print sh.Name, DateValue(sh.TextFrame.Characters.Text)
Next sh
End Sub
Имейте в виду, что вышеизложенное будет работать только в том случае, если пользователь вводит полные даты в текстовые поля. Если они введут «1 июля 23», это сработает, но если они введут «1 июля», это не сработает.
Вышеприведенное также будет работать только в том случае, если у пользователя активен лист при запуске макроса.
Спасибо, я нашел ошибку и хочу связать этот код с текстовым полем, а не с ячейкой.
Ошибка в какой строке?