Прежде всего, строка, содержащая только слово «End», остановит выполнение.
Если вы хотите остановить выполнение в случае неправильного ввода пользователя, сделайте следующее:
If Not IsDate(box) Then
MsgBox "Value entered is not a valid date, please try again.", , "Input Value is Not Correct"
End 'or Exit Sub
End If
Вы сохраняете введенные пользователем месячные в переменной myvar, но фактически не добавляете их в запрос выбора.
Вместо этого:
sQRY = "SELECT * FROM Expenses Where Expenses.Expense_Month=myvar()"
Попробуйте это:
sQRY = "SELECT * FROM Expenses Where Expenses.Expense_Month= " & myvar
Однако ожидаемое в InputBox значение не очевидно. Я предполагаю, что это число от 1 до 12, а поле Expense_Month тоже есть в вашей базе данных.
Если он также содержит год в формате ГГГГ-ММ и является varchar, вам необходимо изменить код следующим образом:
sQRY = "SELECT * FROM Expenses Where Expenses.Expense_Month= '" & myvar & "'"
Любое из вышеперечисленного верно, IsDate не является правильной функцией для проверки правильности ввода. Например, если пользователь введет 20 в поле, он вернет True, поскольку это дата, но 20 января 1900 года.
Также удалите из этой строки первый параметр myvar () .
rs.Open myvar(), sQRY, cnn, adOpenStatic, adLockReadOnly
rs.Open sQRY, cnn, adOpenStatic, adLockReadOnly
На основании вашего дополнительного ввода я рекомендую использовать YYYY-MM-DD в качестве пользовательского ввода. Таким образом, ваш запрос будет определен как:
sQRY = "SELECT * FROM Expenses Where Expenses.Expense_Month= '" & myvar & "'"
Чтобы проверить ваш запрос, откройте окна Locals в редакторе VB, посмотрите, каково значение sQRY, когда выполнение достигнет этой точки, и запустите его в редакторе SQL Access, чтобы увидеть, будет ли оно работать.