• 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.

foutmelding in code

Status
Niet open voor verdere reacties.

bowlingman

Gebruiker
Lid geworden
17 okt 2007
Berichten
433
Hallo,
Ik gebruik op mijn sheet een button om te scrollen naar onderliggende rows aan de hand van een worksheet_change.
Daarvoor heb ik de volgende codes
Code:
Private Sub cmbSpelers_Teams_Click()
    ActiveSheet.cmbSpelers_Teams.Caption = IIf(ActiveSheet.cmbSpelers_Teams.Caption = "Teams", "Spelers", "Teams")
    Range("M1").Value = IIf(Range("M1").Value = "Teams", "Spelers", "Teams")
End Sub
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Or Target.Cells.Count > 1 Then Exit Sub
    If Target = [M1] Then
        ActiveWindow.ScrollRow = IIf(Target.Value = "Teams", 75, 2)
    End If
End Sub
Tot zover alles perfect.
Ik heb echter op die sheet in 187 kolommen vanaf row 4 formules staan die gekopieerd moeten worden naar onderliggende rijen.
Als ik dan "A4:G4" kopieer en vervolgens plak in "A5:G5" lukt dit wel, maar krijg ik telkens een foutmelding op de regel "Exit Sub" van de Worksheet_Change.
Hoe kan ik er voor zorgen dat ik deze foutmelding niet krijg.

Grtjs.
Armand
 
Het is opgelost
Heb de code aangepast
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
[COLOR="#FF0000"]On Error Resume Next[/COLOR]
If Target = "" Or Target.Cells.Count > 1 Then Exit Sub
    If Target = [M1] Then
        ActiveWindow.ScrollRow = IIf(Target.Value = "Teams", 75, 2)
    End If
End Sub

Grtjs.
Armand
 
Als je meerdere cellen kopieert, waarom gebruik je dan target.count > 1?

Zonder 'on error resume next'.
Code:
If IsEmpty(Target) Or Target.Count > 1 Then Exit Sub

Dus zonder.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target = "" Then
    If Target = [M1] Then
        ActiveWindow.ScrollRow = IIf(Target.Value = "Teams", 75, 2)
    End If
 End If
End Sub
 
De code crasht op
Code:
If Target = ""...
als er meerdere cellen geselecteerd zijn. Test daar eerst op.
Merk verder op dat
Code:
If Target = [M1]...
equivalent is met
Code:
If Target.[COLOR=#FF0000]Value[/COLOR] = [M1].[COLOR=#FF0000]Value[/COLOR]
en kan leiden tot onverwachte resultaten.
Ik adviseer zo min mogelijk On Error Resume Next en deze
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Address = "$M$1" And Target.Value <> "" Then
        ActiveWindow.ScrollRow = IIf(Target.Value = "Teams", 75, 2)
    End If
End Sub
 
Vandaar de methode 'IsEmpty'.
 
Hallo,
Bedankt Harry en Timshel voor de tips.
Beide werken perfect.
Toch nog een vraagje.
Wat is het verschil tussen
HTML:
If Target.Address = "$M$1" And Target.Value <> "" Then
en
HTML:
If Target = [M1] Then
Beide doen hetzelfde.

Grtjs.
Armand
 
In het laatste geval wordt alleen getest of Target, de geselecteerde cel, dezelfde waarde heeft als cel M1. Dit kan ook True opleveren als een andere cel dan M1 is geselecteerd. Het zal waarschijnlijk zelden problemen opleveren maar het is goed om het verschil te beseffen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan