Как исправить несоответствие типа ошибки 13 во время выполнения

У меня есть код для фильтрации данных между двумя датами, когда этот код каждый раз пытается запустить, выдавая мне сообщение ошибка времени выполнения 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

Ошибка в какой строке?

Tim Williams 13.04.2023 23:39

Я не знаю, как это знать?

Mohamed Amin 13.04.2023 23:41

Какая строка выделяется, когда вы нажимаете «Отладка» после появления ошибки?

Tim Williams 13.04.2023 23:45

Нет, любая выделенная строка

Mohamed Amin 13.04.2023 23:53

Тогда, возможно, ошибка где-то еще. Какие настройки у вас есть в разделе VBeditor >> Инструменты >> Параметры >> вкладка Общие >> Перехват ошибок? Убедитесь, что для него установлено значение «Взлом в модуль класса», а затем повторите попытку.

Tim Williams 13.04.2023 23:56

попробуй Range("c7:c80").AutoFilter 3, "> = " & CDate(sDate), xlAnd, "< = " & CDate(EDate)

k1dr0ck 14.04.2023 01:59

@TimWilliams После того, как я установил для перехвата ошибок значение «Перерыв в модуле класса», начните выделенную строку sDate = Range («B4»). Значение

Mohamed Amin 14.04.2023 07:28
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
7
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я могу воспроизвести эту ошибку, если диапазон 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 июля», это не сработает.

Вышеприведенное также будет работать только в том случае, если у пользователя активен лист при запуске макроса.

Спасибо, я нашел ошибку и хочу связать этот код с текстовым полем, а не с ячейкой.

Mohamed Amin 14.04.2023 07:58

Другие вопросы по теме