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

rijnummer van gewijzigde cel

Status
Niet open voor verdere reacties.

ewaldmauritz

Gebruiker
Lid geworden
19 okt 2011
Berichten
87
Kan iemand mij vertellen hoe je in VBA het rijnummer van een cel die op dat moment wordt gewijzigd uitleest?
Heb het geprobeerd met ActiveCell.Row, maar dat werkt niet. Bevestig je namelijk de invoer met Enter dan komt de selectie één cel lager uit en dus het rijnummer één te hoog. Bevestig je de invoer met pijltje naar rechts/links dan klopt het wel. Maar er is geen garantie dat de gebruiker dit zal doen.
 
Maak gebruik van de 'Change' event ipv de 'Selection_change'.
 
Gebruik het Change-event icm target.row

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Debug.Print Target.Row
End Sub
 
De macro maakt al onderdeel uit van een Change event. Daarin heb ik het bereik K2:K1000 gedefinieerd. Als er cellen in die range worden gewijzigd, gaat er een macro draaien. Maar die macro moet alleen draaien in de rij waarin de wijziging wordt aangebracht. Dus als cel K2 wordt gewijzigd, moet mijn macro alleen actief zijn in bepaalde cellen in rij 2. Daarvoor heb ik dus het rijnummer nodig van de cel waar de wijziging in wordt aangebracht.
 
Heb je de code van @E v R getest?

Verander voor het gemak...
Code:
Debug.Print Target.Row
.....in.
Code:
msgbox Target.Row

Plaats anders het bestand voor het gemak zonder gevoelige gegevens.
 
Zoek eens naar de documentatie van 'Intersect'.
 
Ik heb de code van E v R gebruikt en dat werkt gedeeltelijk. Ik krijg in elk geval het juiste rijnummer terug. Dit is de hele code:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

    Set KeyCells = Range("K2:K5000")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
    aRow = Target.Row
    Call Reset
    End If

End Sub
Code:
Sub Reset()

Dim aRow As Long

Application.ScreenUpdating = False

Range("O" & aRow).ClearContents
If Range("K" & aRow) = "nee" And Range("L" & aRow) = "ja" Then
Range("L" & aRow) = "nee"
End If

Application.ScreenUpdating = True

End Sub

Alleen krijg ik nu telkens in Sub Reset() een foutmelding 1004 'Methode Range van Obect_Worksheet is mislukt' bij de regel Range("O" & aRow).ClearContents. Enig idee waar dat aan ligt?
 
Omdat jouw macro "losstaat" van het event moet je de waarde van aRow nog wel even meegeven aan deze subroutine

Daarnaast zou ik de events even uitzetten mocht de code eventueel in jouw bereik iets gaat wijzigen
 
Laatst bewerkt:
Excuus, ik wordt elke dag wat wijzer in VBA, maar ben er nog geen expert in.
Ik heb het volgende in de sub toegevoegd, maar dat werkt helaas niet:

Dim aRow As Long
Target As Range

aRow = Target.Row

Kan je mij wat verder helpen?
 
Even combineren:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim aRow As Long
    If Not Intersect(Range("K2:K5000"), Target) Is Nothing and Target.Cells.Count = 1 Then
        aRow = Target.Row
        Application.EnableEvents = False
        Range("O" & aRow).ClearContents
        If Range("K" & aRow) = "nee" And Range("L" & aRow) = "ja" Then
            Range("L" & aRow) = "nee"
        End If
        Application.EnableEvents = True
    End If

End Sub
 
Ach tuurlijk. Dat had ik zelf moeten kunnen bedenken.
Het werkt in elk geval. Bedankt allemaal.
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Range("K2:K5000"), Target) Is Nothing and Target.Count = 1 Then
    target.offset(,4).ClearContents
    If target & target.offset(,1)= "neeja" Then target.offset(,1)= "nee"
  end if
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan