Если операторы в макросах в Excel - PullRequest
0 голосов
/ 21 сентября 2018

У меня изначально был написан макрос, который очищал бы указанные ячейки в листе Excel, но я хочу иметь возможность очищать только определенные строки, если мне это нужно.Вот как мой макрос выглядит в настоящее время.

Sub Rectangle1_Click()
response = MsgBox("Are You Sure?", vbYesNo

If response = vbNo Then
    MsgBox ("OK")
    Exit Sub
End If
    Range("A4:C30").Select
    Selection.ClearContents
    Range("G4:H30").Select
    Selection.ClearContents
End Sub

Я хочу, чтобы он выглядел как-то так, хотя

Sub Rectangle1_Click()
response = MsgBox("Are You Sure?", vbYesNo)

If response = vbNo Then
    MsgBox ("OK")
    Exit Sub
End If
If I4 = 1 then
    Range("A4:C4","G4:H4").Select
    Selection.ClearContents
    Exit Sub
End If
End Sub

И затем повторите этот код для строк 5-30, когда я запускаю код с несколькими операторами if, после появления диалогового окна ничего не происходит.Есть что-то еще, что мне нужно изменить?

Ответы [ 3 ]

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

Я предлагаю вам добавить строку Option Explicit, чтобы убедиться, что все переменные в вашем коде хорошо определены.

Если вы хотите получить доступ к диапазону, используйте объект диапазона.

Option Explicit

Sub Rectangle1_Click()
    Dim response As Variant
    response = MsgBox("Are You Sure?", vbYesNo)

    If response = vbNo Then
        MsgBox ("OK")
        Exit Sub
    End If

    Dim rngI As Range
    Dim cel As Range
    Set rngI = Range("I4:I30")

    For Each cel In rngI
        If cel.value = 1 Then
            cel.Offset(0, -8).Resize(1, 3).ClearContents 'A:C
            cel.Offset(0, -2).Resize(1, 2).ClearContents 'G:H
        End If
    Next cel
End Sub
0 голосов
/ 21 сентября 2018

Вы можете проходить по строкам 4 -30:

Sub Rectangle1_Click()
    Dim lRow As Long
    If MsgBox("Are you sure?", vbYesNo + vbQuestion) = vbYes Then
        For lRow = 4 To 30
            With ActiveSheet
                If .Cells(lRow, "I").Value = 1 Then
                    .Cells(lRow, "A").Resize(1, 3).ClearContents
                    .Cells(lRow, "G").Resize(1, 2).ClearContents
                End If
            End With
        Next lRow
    Else
        MsgBox "OK", vbOKOnly + vbInformation
    End If
End Sub
0 голосов
/ 21 сентября 2018

Нет .Select требуется.Кроме того, вам не нужно проверять на vbNo.Просто код для vbYes и vbNo по умолчанию ничего не делает

Sub Rectangle1_Click()

response = MsgBox("Are You Sure?", vbYesNo)

If response = vbYes and Range("I4") = 1 Then
    Range("A4:C4","G4:H4").ClearContents
End If

End Sub

Если вы хотите отобразить окно сообщения, когда они нажимают no, вы можете сделать что-то подобное (хотя это кажетсяизбыточно, так как пользователь уже сказал no).Если вы поместите vbNo в конце, вы можете избежать Exit Sub, так как это произойдет во время естественного потока

Sub Rectangle1_Click()

response = MsgBox("Are You Sure?", vbYesNo)

If response = vbYes and Range("I4") = 1 Then
    Range("A4:C4","G4:H4").ClearContents
ElseIf response = vbNo
    Msgbox "OK"
End If

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