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

macro korter schrijven?

  • Onderwerp starter Onderwerp starter jpvs
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

jpvs

Gebruiker
Lid geworden
28 jan 2003
Berichten
806
Is het mogelijk dit korter te maken:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("C:C")) Is Nothing Then
        If Application.WorksheetFunction.CountIf(Range("C:C"), Target.Value) = 1 Then
            Sheets("Blad1").Range("J65536").End(xlUp).Offset(1, 0).Value = Target.Value
        End If
    End If
    
   If Not Intersect(Target, Range("D:D")) Is Nothing Then
        If Application.WorksheetFunction.CountIf(Range("D:D"), Target.Value) = 1 Then
            Sheets("Blad1").Range("K65536").End(xlUp).Offset(1, 0).Value = Target.Value
        End If
    End If
    
  If Not Intersect(Target, Range("E:E")) Is Nothing Then
        If Application.WorksheetFunction.CountIf(Range("E:E"), Target.Value) = 1 Then
            Sheets("Blad1").Range("L65536").End(xlUp).Offset(1, 0).Value = Target.Value
        End If
    End If
End Sub

Dank bij voorbaat,

Pierre
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, rngInters As Range
    On Error Resume Next
    Set rngInters = Application.Intersect(Target, Range("C1:E1").EntireColumn)
    For Each rng In rngInters
        If WorksheetFunction.CountIf(rng.EntireColumn, rng.Value) = 1 Then
            Sheets("Blad1").Cells(Rows.Count, rng.Column + 7).End(xlUp).Offset(1).Value = Target.Value
    Next
End Sub

ongeteste code

Wigi
 
Wigi,


Thanks werkt perfect,
If moest alleen nog afgesloten worden met End If.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, rngInters As Range
    On Error Resume Next
    Set rngInters = Application.Intersect(Target, Range("C1:E1").EntireColumn)
    For Each rng In rngInters
        If WorksheetFunction.CountIf(rng.EntireColumn, rng.Value) = 1 Then
            Sheets("Blad1").Cells(Rows.Count, rng.Column + 7).End(xlUp).Offset(1).Value = Target.Value
End If    
Next
End Sub


Pierre
 
If moest alleen nog afgesloten worden met End If.

Of in mijn code:

Code:
If WorksheetFunction.CountIf(rng.EntireColumn, rng.Value) = 1 Then

aanvullen tot

Code:
If WorksheetFunction.CountIf(rng.EntireColumn, rng.Value) = 1 Then _

dan staat het op 1 regel. Dat was iig de bedoeling toen ik de code schreef, herinner ik me nu.

Wigi
 
Wigi,

Aangepast aan de macro en dit werkt ook natuurlijk.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    'met dank aan Wigi
    Dim rng As Range, rngInters As Range
    On Error Resume Next
    Set rngInters = Application.Intersect(Target, Range("C1:E1").EntireColumn)
    For Each rng In rngInters
        If WorksheetFunction.CountIf(rng.EntireColumn, rng.Value) = 1 Then _
            Sheets("Blad1").Cells(Rows.Count, rng.Column + 7).End(xlUp).Offset(1).Value = Target.Value
        ' End If
    Next
End Sub

Eigenlijk werk je toch met een If en moet je niet afsluiten met End IF ?
Hoe kan dit ?




Pierre
 
Laatst bewerkt:
Alles staat op 1 regel door de _ karakter.

Je mag zelfs nog verder gaan:

Code:
If a > 0 Then Range("C1") = 3 Else Range("D2") = 9

bij wijze van voorbeeld. Heb je meer dan 1 regel, dan MOET de End If er staan.

Wigi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan