• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Error 91 bij vullen willekeurige cel

Status
Niet open voor verdere reacties.

Jongbloedvos

Gebruiker
Lid geworden
30 dec 2019
Berichten
9
Hallo allemaal,

Bijgaand de volgende VBA code

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("G23:G222")).Value = "Akkoord" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = vbGreen
ElseIf Intersect(Target, Range("G23:G222")).Value = "Vervallen" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = vbRed
ElseIf Intersect(Target, Range("G23:G222")).Value = "Ingediend" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = vbYellow
ElseIf Intersect(Target, Range("G23:G222")).Value = "Opgesteld" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = vbCyan
ElseIf Intersect(Target, Range("G23:G222")).Value = "" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.ColorIndex = 15
ElseIf Intersect(Target, Range("G23:G222")).Value = "Afgekeurd" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = vbMagenta
End If
End Sub

In principe werkt hij prima voor wat hij moet doen.
Ik krijg alleen een error 91 (objectvariabele of blokvariabele With is niet ingesteld) zodra ik iets wil typen in ELKE andere willekeurige, anders dan "G23:G222"

Ongetwijfeld doe ik iets verkeerd...
Ben nog niet zo handig met VBA.

Kan iemand me helpen met de oplossing?
 
Ik ga je alleen op weg helpen en de code niet uitpluizen en verbeteren.

Code:
If [COLOR=#ff0000]Not [/COLOR]Intersect(Target, Range("G23:G222")) [COLOR=#ff0000]is nothing then 
[/COLOR][COLOR=#ff0000]   If target[/COLOR].Value = "Akkoord" Then
 
Wellicht bedoelde je dit:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("G23:G222")) Is Nothing Then Exit Sub
If Target.Value = "Akkoord" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = vbGreen
ElseIf Target.Value = "Vervallen" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = vbRed
ElseIf Target.Value = "Ingediend" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = vbYellow
ElseIf Target.Value = "Opgesteld" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = vbCyan
ElseIf Target.Value = "" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.ColorIndex = 15
ElseIf Target.Value = "Afgekeurd" Then
Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = vbMagenta
End If
End Sub
 
Laatst bewerkt:
Je hebt maar één keer de 'intersect' nodig en dan voor de rest zou ik 'select case target' doen
 
Hallo,

beide codes werken perfect nu!
Zowel met 'intersect' als met 'select case target'

Is er een bepaalde reden voor om te kiezen voor 'select case target'?
Misschien kan ik er iets van leren.

bedankt in ieder geval voor de hulp! Super zeg!
 
Select Case maakt het beter leesbaar, kan eenvoudiger worden uitgebreid en als de range moet worden aangepast hoeft dat op maar 1 regel:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("G23:G222")) Is Nothing Then
        Select Case Target.Value
            Case "Akkoord":     Kleur = vbGreen
            Case "Vervallen":   Kleur = vbRed
            Case "Ingediend":   Kleur = vbYellow
            Case "Opgesteld":   Kleur = vbCyan
            Case "Afgekeurd":   Kleur = vbMagenta
            Case "":            Kleur = 16777215
        End Select
        Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = Kleur
    End If
End Sub
 
En 'select case' springt de rest van de code over als de waarde is gevonden.

xlnone kan je ook gebruiken bij (leeg) ""

Hier nog een oneliner.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("G23:G222")) Is Nothing Then Sheets(Format(Target.Offset(, -6), "00")).Tab.Color = Switch(Target = "Akkoord", vbGreen, Target = "Vervallen", vbRed, Target = "Ingediend", vbYellow, Target = "Opgesteld", vbCyan, Target = "Afgekeurd", vbMagenta, Target = "", xlNone, Target <> "", xlNone)
End Sub
 
Laatst bewerkt:
Scherp opgemerkt!
Ik zat op kantoor, en uiteraard had ik mijn wachtwoord weer nergens opgeslagen... as always

Dus maar even een nieuw account aangemaakt, kan mijn compagnon ook meteen een vraag stellen als het nodig is.

Groeten
 
Select case is in dit geval ook sneller omdat je niet telkens de waarde uit de cel leest maar maar één keer.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan