Справка по условному циклу VBA, Confused - PullRequest
0 голосов
/ 28 февраля 2019

Поэтому я спрашиваю об этом потому, что я не уверен, почему этот код не работает, поэтому я запутался.Я не знаю, как сделать что-то конкретное.

Так что есть некоторые даты, которые "сохраняются" в диапазоне AK23: AL72.Предполагается, что этот код сравнивает сохраненные даты с датами в диапазоне K23: L72, и если какая-либо дата в строках: 23,35,36,45,46,47 отличается, он запрашивает у пользователя видимые приглашения в MsgBox.,Если какие-либо другие даты, не входящие в эти конкретные строки, отличаются, предполагается, что пользователь запросит примечания через InputBox.То, что он делает, это просто подсказывает через MsgBox любую другую дату.Это также делает некоторые другие вещи, но это все работает правильно.Я понятия не имею, почему, если честно, все подсказки такие странные, я говорил об этом около часа или двух.

Я знаю, что код немного грубоват, но я довольно нов в этом.

    Dim i As Integer
    Dim j As Integer

    For i = 0 To 49

    cRow = i + 23

        For j = 0 To 1

            If Sheets("Monthly Status").Cells(cRow, j + 11) <> Sheets("Monthly Status").Cells(cRow, j + 37) Then

                If cRow = 23 Or 35 Or 36 Or 45 Or 46 Or 47 Then

                    ans = MsgBox("You made a change to a critical deliverable date, do you want to continue?", vbYesNo + vbQuestion)

                    If ans = vbNo Then
                        MsgBox "You are not authorized to make this change!", vbCritical
                        Application.ScreenUpdating = False
                        Sheets("Monthly Status").Cells(cRow, j + 37).Copy
                        Sheets("Monthly Status").Cells(cRow, j + 11).PasteSpecial xlPasteValues
                        Application.CutCopyMode = False
                    End If

                    If ans = vbYes Then
                        ans = MsgBox("Do you have Scope Change Aproval?", vbYesNo + vbQuestion)

                        If ans = vbNo Then
                            MsgBox "You are not authorized to make this change! Changes to critical dates will be rolled back.", vbCritical
                            Application.ScreenUpdating = False
                            Sheets("Monthly Status").Cells(cRow, j + 37).Copy
                            Sheets("Monthly Status").Cells(cRow, j + 11).PasteSpecial xlPasteValues
                            Application.CutCopyMode = False
                        End If

                    End If

                Application.ScreenUpdating = False
                Sheets("Monthly Status").Range("K23:L72").Copy
                Sheets("Monthly Status").Range("AK23:AL72").PasteSpecial xlPasteValues
                Application.CutCopyMode = False

                Application.ScreenUpdating = True

                Else
                End If
            End If



            If Sheets("Monthly Status").Cells(cRow, j + 11) <> Sheets("Monthly Status").Cells(cRow, j + 37) Then

                Worksheets("Monthly Status Footnotes").Unprotect Password:="SCPV3"

                Worksheets("Monthly Status Footnotes").Cells(MSFFreeRow, "D").value = InputBox("You changed a date, you must enter revison notes!", "Notes")

                    Application.ScreenUpdating = False

                Worksheets("Monthly Status Footnotes").Protect Password:="SCPV3"

                    Sheets("Monthly Status").Range("K23:L72").Copy
                    Sheets("Monthly Status").Range("AK23:AL72").PasteSpecial xlPasteValues
                    Application.CutCopyMode = False

                    Application.ScreenUpdating = True
            End
            End If

        Next j
    Next i

Дальнейшее уточнение:

Очень сложно объяснить с помощью письменных слов.Поэтому я проверяю все ячейки в диапазоне K23: L72 и сравниваю их с соответствующими сохраненными датами в AK23: AL72.Затем, если дата в K23: L72 отличается от своей соответствующей даты в AK23: AL72, мне нужно проверить, встречается ли эта измененная дата в одной из этих строк: 23,35,36,45,46,47, если это то, то яНужно предложить пользователю серию вопросов, если ответ на оба вопроса - да, тогда я сохраняю лист и сохраняю новые даты в AK23: AL72.Если ответ на любой вопрос - «нет», то дату, которая была изменена, необходимо заменить старой датой ответа ядра из диапазона AK23: AL72, после чего лист будет сохранен.Если дата, которая была изменена, отсутствует в одной из этих строк, но все еще отличается, мне нужно запросить у пользователя примечания, а затем сохранить лист и затем сохранить новые даты в AK23: AL72.Если ничто не отличается вообще, лист должен просто сохранить.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Я бы рекомендовал использовать структуру Select Case в этом случае, потому что вы хотите сравнить переменную со многими значениями:

Select Case cRow
Case 23, 35, 36, 45, 46, 47
    ' MsgBox
Case Else
    ' No MsgBox
End Select
0 голосов
/ 28 февраля 2019

Я думаю, что SJR уже указал, что нужно сделать, но, возможно, вы этого не заметили:

Это выражение if If cRow = 23 Or 35 Or 36 Or 45 Or 46 Or 47 Then всегда будет приводить к true, потому что or не делаетне работает таким образом.

В псевдокоде это в основном переводит на If cRow = 23 or If 35 or If 36 or If 45 и т. Д. If 35, а все остальные числа всегда приводят к true.Как сказал SJR, вам нужно изменить это значение на

If cRow = 23 Or cRow = 35 Or cRow = 36 Or cRow = 45 Or cRow = 46 Or cRow = 47 Then

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...