Opgelost VBA code aanpassen werken met 2 Userforms

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

samabert

Gebruiker
Lid geworden
27 mrt 2010
Berichten
308
Hallo,

In de code controleer ik de waarde tussen twee getallen (>=110 en <=200) en geef een bericht via een Userform1. Dit werk goed.
Kan je in dezelfde code een tweede controle uitvoeren tussen twee andere getallen (<=20 en >=10) en Userform2 weergeven?

Alvast bedankt.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim xCell As Range, Rg As Range
    On Error Resume Next
    Set Rg = Application.Intersect(Target, Range("A1:A20"))
    If Not Rg Is Nothing Then
        For Each xCell In Rg
            If xCell.Value >= 100 Then
                If xCell.Value <= 200 Then
                    xCell.Select
                    UserForm1.Show
                    Exit Sub
                End If
            End If
        Next
    End If

End Sub
 

Bijlagen

Dat kan, maar vraag me niet waarom:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xCell As Range, Rg As Range
    On Error Resume Next
    Set Rg = Application.Intersect(Target, Range("A1:A20"))
    If Not Rg Is Nothing Then
        For Each xCell In Rg
            If xCell.Value >= 100 And xCell.Value <= 200 Then
                UserForm1.Show
            ElseIf xCell.Value >= 10 And xCell.Value <= 20 Then
                UserForm2.Show
            End If
        Next
    End If
End Sub
 
Is dit niet voldoende?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A1:A20")) Is Nothing Then
        Select Case Target.Value
            Case 100 To 200: userform1.Show
            Case 10 To 20:   userform2.Show
        End Select
    End If
End Sub
 
Laatst bewerkt:
Beide oplossingen werken perfect!
De code van edmoor is inderdaad korter, ik ga het morgen nog eens rustig bekijken welke ik ga gebruiken.

Allebei bedankt voor de oplossing :thumb:
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A1:A20")) Is Nothing And Target \ 10 ^ (Len(Target) - 1) = 1 Then MsgBox Target \ 10 ^ (Len(Target) - 1), , "snb"
End Sub

2 userforms zijn zelden een goed idee.
Met de multipage kan je van ieder UF een onbeperkt aantal totaal verschillend opgebouwde/vormgegeven UF's maken.
Voor een eenvoudige melding is een Msgbox eerder aangewezen.
 
Laatst bewerkt:
@snb, bedankt voor jouw andere aanpak, interresant.
Het werkt ook goed, maar als ik een getal in de range terug verwijder om aan te passen krijg ik volgende melding :
Fout 11
Delen door nul.
Kan je dit opvangen ?
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("A1:A20")) Is Nothing And Target <> "" Then If Target \ 10 ^ (Len(Target) - 1) = 1 Then MsgBox "tussen " & IIf(Len(Target) = 2, "10 en 20", "100 en 200"), , "snb"
End Sub
 
Laatst bewerkt:
Ik dacht het begrepen te hebben, maar dat is het niet.
Hoe wijzig je de waarden waartussen er moet gecontroleerd worden? Als ik deze in de code aanpas, voorbeeld: tussen 100 en 200 naar 300 en 400 , wijzigt er niets. De eerste waarde tussen 100 en 200 blijft werken.
Zou je mij a.u.b. kunnen uitleggen hoe jouw code eigenlijk werkt op het controleren tussen de waarden.
 
Tussen 300 en 400 moet het resultaat van een deling door 100 ( 10^ (len(target)-1) natuurlijk 3 zijn
 
Ok, bedankt voor de uitleg.
Ik ga het dit weekend proberen te begrijpen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan