У меня возникли некоторые проблемы со сценарием VBA, который я создаю, и я подумал, что лучше всего задать вопрос здесь. Я дам некоторую предысторию:
Я пишу эту программу, так как многие мои клиенты идут против обычных документов, выдаваемых налоговой инспекцией моей страны, и платят наличными, а затем заставляют меня рассчитать сумму налога на эту конкретную сумму. Выяснение этого вручную требует немало бумажной работы, поэтому я пишу приложение, которое делает это и многое другое. Приведенный ниже сценарий лежит в основе того, что необходимо сделать.
Для первого варианта использования я по сути создал одноразовую форму в Access - ничего не пишется, она просто для временного расчета и отправки на принтер - для расчета отпускных.
Поскольку я не могу выполнить поиск SQL в вычисляемой ячейке, я запускаю сценарий VBA, который выполняет за меня тяжелую работу, передавая три введенных значения в качестве аргументов.
Тем не менее, я не могу избавиться от ошибки выполнения 3075, и я не могу понять, откуда она взялась. Я проследил это до оператора SQL, но не могу найти, где может быть ошибка оператора. Где я ошибаюсь?
Вот код:
Option Compare Database
Public Function DetermineTax(CurrentDate As Date, CurrWageType As String, CalcNetWages As Currency)
'Checks whether required fields are blank
If Not (IsDate(CurrentDate)) Then
Exit Function
End If
If (CurrWageType = "") Then
Exit Function
End If
If (CalcNetWages <= CCur(0#)) Then
Exit Function
End If
Dim strSQL As String
'Calculates tax based on (-((n-b)/(a-1))-n) formula, where all WHERE arguments have been met.
strSQL =
"SELECT FIRST (ROUND(((-(CalcNetWages-tblWageRate.CoefficientB)/(tblWageRate.CoefficientA-1))-CalcNetWages))) " & _
"FROM tblWageType INNER JOIN tblWageRate " & _
"ON tblWageType.WageTypeID = tblWageRate.fk_WageTypeID " & _
"WHERE tblWageRate.TaxYearStart <= CurrentDate And " & _
"tblWageRate.TaxYearEnd >= CurrentDate And " & _
"tblWageType.WageType = CurrWageType And " & _
"tblWageRate.Net >= CalcNetWages;"
CurrentDb.Execute Query:=strSQL, Options:=dbFailOnError + dbSeeChanges
'DoCmd.RunSQL strSQL
End Function
Конечно, если будут еще вопросы, я буду рядом, чтобы ответить на них.
Спасибо!
EDIT: Угу, я слишком долго смотрел на этот код. Функцию ROUND необходимо заключать в скобки. Это избавило от ошибки 3075. Я изменил свой код выше, чтобы он был сейчас.
Однако теперь я получаю сообщение об ошибке 3065 «Не удается выполнить запрос выбора». После некоторого предварительного поиска в Google кажется, что я не могу использовать поле SELECT в форме, но я не думаю, что это должно иметь значение, поскольку я вызываю его в модуле. Я попытаюсь продолжить завтра, когда я пойду спать, а пока у кого-нибудь есть какие-нибудь идеи?