Использование одной и той же переменной в 2 разделах кода внутри единой подсистемы MS Access - PullRequest
0 голосов
/ 12 сентября 2018

Я делаю форму доступа, которая позволит пользователю обрабатывать обновления контракта, и внутри формы у меня есть кнопка, которая меняет 3 даты для каждого контракта, дату подключения, дату окончания и самую раннюю дату обновления.

При изменении даты окончания я использую этот код для фактического изменения даты:

[End Date] = DateAdd("m", Number, FirstDate)

Дата окончания - это дата, которую я хочу изменить, затем добавление к дате с использованием DateAdd, изменяя месяц даты с числом, которое вводит пользователь, обычно 24, затем FirstDate является текущей датой окончания.FirstDate устанавливается как переменная в начале кода.

Я хочу изменить это следующим образом:

[End Date] = DateAdd("m", Number, Startdate)

Где он делает все то же самое, но с использованием другой переменнойэто используется ранее в коде, чтобы изменить дату начала контракта, который работает в этом разделе кода, но когда я пытаюсь использовать его снова здесь, код вылетает.

Это также все еще происходит, даже когдаЯ изменяю Startdate на [Дата подключения].

Может кто-нибудь помочь мне понять, почему код не будет использовать переменную Startdate второй раз в разделе кода после первого.

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

Private Sub cmdUpgrade_Click()

Dim Startdate As String
Dim Number As String
Dim Tariff As String

Startdate = InputBox("Enter Start Date (00/00/0000):", "Inputbox")
If StrPtr(Startdate) = 0 Then
MsgBox "You pressed Cancel" 'Option 1
Else
If Startdate = "" Then
MsgBox "Input Left Empty" ' Option 2
Else
[Date Connected] = Startdate
End If
End If


Number = InputBox("Enter Contract Length + Rollover:", "Inputbox")
If StrPtr(Number) = 0 Then
MsgBox "You pressed Cancel" 'Option 1
Else
If Number = "" Then
MsgBox "Input Left Empty" ' Option 2
Else
**[End Date] = DateAdd("m", Number, Startdate)**
[Earliest Upgrade] = DateAdd("d", -180, [End Date])
End If
End If

Tariff = InputBox("Enter Tarrif", "Inputbox")
If StrPtr(Tarrif) = 0 Then
MsgBox "You pressed Cancel" 'Option 1
Else
If Tariff = "" Then
MsgBox "Input Left Empty" ' Option 2
Else
[Current Talk Plan] = Tariff
End If
End If

Forms!frmForecast.Form.Requery
DoCmd.SearchForRecord , , acFirst, "Year([Earliest Upgrade]) = Year(Date())                 
And Month([Earliest Upgrade]) = Month(Date())"
End Sub

1 Ответ

0 голосов
/ 12 сентября 2018

Всегда обрабатывать даты как даты, а не строки. Кроме того, не имеет значения, нажимает ли пользователь кнопку «Отмена» или «OK» для пустого ввода:

Dim Startdate As Date
Dim Enddate As Date
Dim TestDate As String
Dim Number As String
Dim Tariff As String

TextDate = InputBox("Enter Start Date (00/00/0000):", "Inputbox")
If TextDate = "" Then
    MsgBox "No date entered" 'Option 1
ElseIf Not IsDate(TextDate) Then
    MsgBox "Please enter a valid date" ' Option 2
Else
    Startdate = DateValue(TextDate)
    [Date Connected] = Startdate
End If

<snip>

Enddate = DateAdd("m", Number, Startdate)
[End Date] = Enddate
[Earliest Upgrade] = DateAdd("d", -180, Enddate)
...