1
votes

Quitter Si et Suivant pour

J'ai une boucle for next avec une instruction if. Si l'instruction "If" est vraie, quittez le if et le suivant pour. Voici le code: Ce que je veux, c'est que si Rng1 n'est pas dans Range1, passez au prochain rng1. Je semble être une solution simple, mais je ne peux pas comprendre. Merci d'avance.

Sub me_test()

Dim Range1 As Range
Dim Rng1 As Range
Set Range1 = Application.Selection
Set Range1 = Application.InputBox("Please Select Your Range :", xtitledID, Range1.Address, Type:=8)

    For Each Rng1 In Range1
        If Intersect(Rng1, Range("B7:B15")) Is Nothing Then
            MsgBox "Not within the perscribed range." & vbCr & "Please click OK to continue."
        Else
            Rng1.Value = "Good"
        End If
    Next

MsgBox "All Done"

End Sub


2 commentaires

Je suis confus quant à ce que vous essayez de faire - "Ce que je veux, c'est que si Rng1 n'est pas dans Range1 alors aller au prochain rng1." - votre code le fait déjà, non? Il semble que vous ayez besoin d'une Sortie pour quelque part? De plus, pour votre santé et celle des autres, vous devriez vraiment utiliser plus de variables descriptives que Rng1 et Range1 - parlez de confusion! :)


Désolé, si rng1 n'est pas dans range1, passez au prochain rng1. ce que j'essaie de faire intempestivement, c'est d'éliminer la possibilité pour l'utilisateur de sélectionner une cellule ou une plage de cellules en dehors de la plage définie, range1.


4 Réponses :


1
votes
Sub me_test()

    Dim Range1 As Range
    Dim Rng1 As Range

    Set Range1 = Application.Selection

    Set Range1 = Application.InputBox("Please Select Your Range :", xtitledID, _
                                       Range1.Address, Type:=8)

    Set Range1 = Application.Intersect(Range1, ActiveSheet.Range("B7:B15"))

    If Range1 is nothing then
         MsgBox "No valid cells selected!"
    else
         Range1.Value = "Good"
    end if 

End Sub

4 commentaires

Une intersection valide entre deux plages ne garantit pas que l'une d'elles est complètement contenue dans l'autre


Je le sais, mais ce n'était pas une exigence dans la question du PO.


Je fais référence à son commentaire "ce que j'essaie de faire, c'est d'éliminer la possibilité pour l'utilisateur de sélectionner une cellule ou une plage de cellules en dehors de la plage définie, plage1"


Je suivais la logique générale du code publié par l'OP, et "Ce que je veux, c'est que si Rng1 n'est pas dans Range1, alors passe au prochain rng1" - il semblait que le but était de traiter uniquement les cellules dans la plage souhaitée. Le tout n'est pas clair cependant.



0
votes

Cela devrait fonctionner. Cela fonctionne de mon côté

Sub me_test()

    Dim Range1 As Range
    Dim Rng1 As Range
    Dim rngIntr As Range

    Set Range1 = Application.Selection
    Set Range1 = Application.InputBox("Please Select Your Range :", xtitledID, Range1.Address, Type:=8)


    For Each Rng1 In Range1
        Set rngIntr = Intersect(Rng1.Cells, Range("B7:B15").Cells)
        If rngIntr Is Nothing Then
            MsgBox "Not within the perscribed range." & vbCr & "Please click OK to continue."
        Else
            Rng1.Value = "Good"
        End If
        Set rngInr = Nothing
    Next

    Set Range1 = Nothing
    Set Rng1 = Nothing

    MsgBox "All Done"

End Sub


0 commentaires

0
votes

Que diriez-vous de ceci: affichez uniquement la boîte de réception "Pas dans ..." si aucune des cellules sélectionnées ne se trouve dans la plage souhaitée. Sinon, continuez à parcourir la sélection et écrivez Bon dans chaque cellule qui croise la plage souhaitée.

Sub me_test2()

Dim Range1 As Range
Dim Rng1 As Range
Set Range1 = Application.Selection
Set Range1 = Application.InputBox("Please Select Your Range :", xtitledID, Range1.Address, Type:=8)

If Intersect(Range("B7:B15"), Range1) Is Nothing Then
    MsgBox "Not within the perscribed range." & vbCr & "Please click OK to continue."
Else
    For Each Rng1 In Range1
        If Not Intersect(Rng1, Range("B7:B15")) Is Nothing Then
            Rng1.Value = "Good"
        End If
    Next
    MsgBox "All Done"
End If

End Sub


0 commentaires

0
votes

Peut-être:

Sub me_test()
    Dim rng1 As Range

    Do 
        Set rng1 = Application.InputBox("Please Select Your Range :", xtitledID, Selection.Address, Type:=8)
    Loop While rng1 Is Nothing

    If Union(rng1, Range("B7:B15")).Address =  Range("B7:B15").Address Then 
        rng1.Value = "Good"
    Else
        MsgBox "Not within the perscribed range." & vbCr & "Please click OK to continue."
    End If

    MsgBox "All Done"

End Sub

Vous pouvez également rechercher une sélection de plage utilisée valide:

Sub me_test()
    Dim rng1 As Range

    Set rng1 = Application.InputBox("Please Select Your Range :", xtitledID, Selection.Address, Type:=8)

    If Union(rng1, Range("B7:B15")).Address =  Range("B7:B15").Address Then 
        rng1.Value = "Good"
    Else
        MsgBox "Not within the perscribed range." & vbCr & "Please click OK to continue."
    End If

    MsgBox "All Done"

End Sub


0 commentaires